recv.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:3k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*
  2.  * Secure RTP with libgcrypt
  3.  * Copyright (C) 2007  Rémi Denis-Courmont <rdenis # simphalempin , com>
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Lesser General Public
  16.  * License along with this library; if not, write to the Free Software
  17.  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  18.  */
  19. #ifdef HAVE_CONFIG_H
  20. # include <config.h>
  21. #endif
  22. #include <stdint.h>
  23. #include <stddef.h>
  24. #include "srtp.h"
  25. #include <stdio.h>
  26. #include <string.h>
  27. #include <unistd.h>
  28. #include <netinet/in.h>
  29. int main (void)
  30. {
  31.     int fd = socket (AF_INET, SOCK_DGRAM, 0);
  32.     struct sockaddr_in addr;
  33.     memset (&addr, 0, sizeof (addr));
  34.     addr.sin_family = AF_INET;
  35. #ifdef HAVE_SA_LEN
  36.     addr.sin_len = sizeof (addr);
  37. #endif
  38.     addr.sin_port = htons (10000);
  39.     addr.sin_addr.s_addr = htonl (0x7f000001);
  40.     if (bind (fd, (struct sockaddr *)&addr, sizeof (addr)))
  41.         return 1;
  42.     static const uint8_t key[16] =
  43.         "x12x34x56x78x9AxBCxDExF0"
  44.         "x12x34x56x78x9AxBCxDExF0";
  45.     static const uint8_t salt[14] =
  46.         "x12x34x56x78x90" "x12x34x56x78x90" "x12x34x56x78";
  47.     srtp_session_t *s = srtp_create (SRTP_ENCR_AES_CM, SRTP_AUTH_HMAC_SHA1, 10,
  48.                                      SRTP_PRF_AES_CM, 0);
  49.     if (s == NULL)
  50.         return 1;
  51.     if (srtp_setkey (s, key, 16, salt, 14))
  52.         goto error;
  53.     uint8_t buf[1500];
  54.     size_t len;
  55. #if 0
  56.     memset (buf, 0, sizeof (buf));
  57.     buf[0] = 2 << 6;
  58.     buf[1] = 1;
  59.     memcpy (buf + 2, &(uint16_t){ htons (9527) }, 2);
  60.     memcpy (buf + 8, "xdexadxbexef", 4);
  61.     memcpy (buf + 4, &(uint32_t){ htonl (1) }, 4);
  62.     strcpy ((char *)buf + 12, "an");
  63.     len = 12 + strlen ((char *)buf + 12) + 1;
  64. #endif
  65.     for (;;)
  66.     {
  67.         len = read (fd, buf, sizeof (buf));
  68.         int val = srtp_recv (s, buf, &len);
  69.         if (val)
  70.         {
  71.             fprintf (stderr, "Cannot decrypt: %sn", strerror (val));
  72.             continue;
  73.         }
  74.         puts ((char *)buf + 12);
  75.         //if (srtp_send (s, buf, &len, sizeof (buf)) || srtp_recv (s, buf, &len))
  76.         //    break;
  77.         puts ((char *)buf + 12);
  78.     }
  79. error:
  80.     srtp_destroy (s);
  81.     close (fd);
  82.     return 0;
  83. }