コード例 #1
0
ファイル: stunserver_test.c プロジェクト: disigma/stunlib
CTEST(stunserver, SendDiscussResp_Valid)
{
  bool useRelay = false;

  discussData.streamType    = 0x004;
  discussData.interactivity = 0x01;

  discussData.networkStatus_flags            = 0;
  discussData.networkStatus_nodeCnt          = 0;
  discussData.networkStatus_tbd              = 0;
  discussData.networkStatus_upMaxBandwidth   = 0;
  discussData.networkStatus_downMaxBandwidth = 0;

  sockaddr_initFromString( (struct sockaddr*)&stunServerAddr,
                           "193.200.93.152:3478" );

  StunClient_Alloc(&stunInstance);
  ASSERT_TRUE( StunServer_SendConnectivityBindingResp(stunInstance,
                                                       0,  /* sockhandle */
                                                       LastTransId,
                                                       "pem",
                                                       (struct sockaddr*)&
                                                       stunServerAddr,
                                                       (struct sockaddr*)&
                                                       stunServerAddr,
                                                       2,
                                                       2,
                                                       NULL,
                                                       SendRawStun,
                                                       0,
                                                       useRelay,
                                                       0,  /* responseCode */
                                                       &discussData) );

}
コード例 #2
0
ファイル: stunserver_test.c プロジェクト: disigma/stunlib
CTEST(stunserver, SendResp_Valid_IPv6)
{
  bool                    useRelay = false;
  struct sockaddr_storage mappedAddr,servAddr;
  sockaddr_reset( &servAddr);
  sockaddr_reset( &mappedAddr);

  sockaddr_initFromString( (struct sockaddr*)&servAddr,
                           "[2a02:fe0:c410:cb31:e4d:e93f:fecb:bf6b]:1234" );

  StunClient_Alloc(&stunInstance);
  ASSERT_FALSE( StunServer_SendConnectivityBindingResp(stunInstance,
                                                       0,  /* sockhandle */
                                                       LastTransId,
                                                       "pem",
                                                       (struct sockaddr*)&
                                                       mappedAddr,
                                                       (struct sockaddr*)&
                                                       servAddr,
                                                       0,
                                                       0,
                                                       NULL,
                                                       SendRawStun,
                                                       0,
                                                       useRelay,
                                                       0,  /* responseCode */
                                                       NULL) );
  sockaddr_initFromString( (struct sockaddr*)&mappedAddr,
                           "[2a02:fe0:c410:cb31:e4d:e93f:fecb:bf6b]:1234" );
  ASSERT_TRUE( StunServer_SendConnectivityBindingResp(stunInstance,
                                                      0,
                                                      LastTransId,
                                                      "pem",
                                                      (struct sockaddr*)&
                                                      mappedAddr,
                                                      (struct sockaddr*)&
                                                      servAddr,
                                                      0,
                                                      0,
                                                      NULL,
                                                      SendRawStun,
                                                      0,
                                                      useRelay,
                                                      0,
                                                      NULL) );

}
コード例 #3
0
ファイル: stunserver_test.c プロジェクト: disigma/stunlib
CTEST(stunserver, SendResp_Valid)
{
  bool                    useRelay = false;
  struct sockaddr_storage mappedAddr,servAddr;
  sockaddr_initFromString( (struct sockaddr*)&servAddr,
                           "193.200.93.152:3478" );

  StunClient_Alloc(&stunInstance);
  ASSERT_FALSE( StunServer_SendConnectivityBindingResp(stunInstance,
                                                       0,  /* sockhandle */
                                                       LastTransId,
                                                       "pem",
                                                       (struct sockaddr*)&
                                                       mappedAddr,
                                                       (struct sockaddr*)&
                                                       servAddr,
                                                       0,
                                                       0,
                                                       NULL,
                                                       SendRawStun,
                                                       0,
                                                       useRelay,
                                                       0,  /* responseCode */
                                                       NULL) );
  sockaddr_initFromString( (struct sockaddr*)&mappedAddr,
                           "193.200.93.152:3478" );
  ASSERT_TRUE( StunServer_SendConnectivityBindingResp(stunInstance,
                                                      0,
                                                      LastTransId,
                                                      "pem",
                                                      (struct sockaddr*)&
                                                      mappedAddr,
                                                      (struct sockaddr*)&
                                                      servAddr,
                                                      2,
                                                      3,
                                                      NULL,
                                                      SendRawStun,
                                                      0,
                                                      useRelay,
                                                      0,
                                                      NULL) );

}
コード例 #4
0
ファイル: stunserver.c プロジェクト: fluffy/stunserver
void
stunHandler(struct socketConfig* config,
            struct sockaddr*     from_addr,
            void*                cb,
            unsigned char*       buf,
            int                  buflen)
{
  StunMessage            stunRequest;
  STUN_INCOMING_REQ_DATA pReq;
  STUN_CLIENT_DATA*      clientData = (STUN_CLIENT_DATA*)cb;
  char                   realm[STUN_MSG_MAX_REALM_LENGTH];

  printf("Got a STUN message... (%i)\n", buflen);
  stunlib_DecodeMessage(buf, buflen, &stunRequest, NULL, stdout);
  printf("Finished decoding..\n");
  if (stunRequest.msgHdr.msgType == STUN_MSG_DataIndicationMsg)
  {
    if (stunRequest.hasData)
    {
      /* Decode and do something with the data? */
      /* config->data_handler(config->socketConfig[i].sockfd, */
      /*                     config->socketConfig[i].tInst, */
      /*                     &buf[stunResponse.data.offset]); */
    }
  }
  if (stunRequest.hasRealm)
  {
    memcpy(&realm, stunRequest.realm.value, STUN_MSG_MAX_REALM_LENGTH);
  }

  if (stunRequest.hasMessageIntegrity)
  {
    printf("Checking integrity..%s\n", config->pass);
    if ( stunlib_checkIntegrity( buf,
                                 buflen,
                                 &stunRequest,
                                 (uint8_t*)config->pass,
                                 strlen(config->pass) ) )
    {
      printf("     - Integrity check OK\n");
    }
    else
    {
      printf("     - Integrity check NOT OK\n");
    }
  }

  StunServer_HandleStunIncomingBindReqMsg(clientData,
                                          &pReq,
                                          &stunRequest,
                                          false);

  StunServer_SendConnectivityBindingResp(clientData,
                                         config->sockfd,
                                         stunRequest.msgHdr.id,
                                         PASSWORD,
                                         from_addr,
                                         from_addr,
                                         NULL,
                                         sendPacket,
                                         SOCK_DGRAM,
                                         false,
                                         200,
                                         NULL);

}
コード例 #5
0
ファイル: stunserver.c プロジェクト: palerikm/stunserver
void
stunHandler(struct socketConfig* config,
            struct sockaddr*     from_addr,
            void*                cb,
            unsigned char*       buf,
            int                  buflen)
{
  StunMessage stunRequest;
  /* STUN_INCOMING_REQ_DATA pReq; */
  STUN_CLIENT_DATA* clientData = (STUN_CLIENT_DATA*)cb;
  char              realm[STUN_MSG_MAX_REALM_LENGTH];
  uint8_t           enf_flags            = 0;
  uint8_t           enf_nodeCnt          = 0;
  uint16_t          enf_upMaxBandwidth   = 0;
  uint16_t          enf_downMaxBandwidth = 0;


  stun_pkt_cnt++;
  byte_cnt += buflen;
/*  printf("Got a STUN message... (%i)\n", buflen); */
  stunlib_DecodeMessage(buf, buflen, &stunRequest, NULL, NULL);
  /* printf("Finished decoding..\n"); */
  if (stunRequest.msgHdr.msgType == STUN_MSG_DataIndicationMsg)
  {
    if (stunRequest.hasData)
    {
      /* Decode and do something with the data? */
      /* config->data_handler(config->socketConfig[i].sockfd, */
      /*                     config->socketConfig[i].tInst, */
      /*                     &buf[stunResponse.data.offset]); */
    }
  }
  if (stunRequest.hasRealm)
  {
    memcpy(&realm, stunRequest.realm.value, STUN_MSG_MAX_REALM_LENGTH);
  }

  if (stunRequest.hasEnfNetworkStatus)
  {
    enf_flags            = stunRequest.enfNetworkStatusResp.flags;
    enf_nodeCnt          = stunRequest.enfNetworkStatusResp.nodeCnt;
    enf_upMaxBandwidth   = stunRequest.enfNetworkStatusResp.upMaxBandwidth;
    enf_downMaxBandwidth = stunRequest.enfNetworkStatusResp.downMaxBandwidth;
  }


  if (stunRequest.hasMessageIntegrity)
  {
    /* printf("Checking integrity..%s\n", config->pass); */
    if ( !stunlib_checkIntegrity( buf,
                                  buflen,
                                  &stunRequest,
                                  (uint8_t*)config->pass,
                                  strlen(config->pass) ) )
    {
      printf("     - Integrity check NOT OK\n");
      return;
    }
  }
  uint32_t lastReqCnt = 0;

  if (stunRequest.hasTransCount)
  {
    lastReqCnt = stunRequest.transCount.reqCnt;
    /* lastRespCnt = stunRequest.transCount.respCnt; */
  }
  if (lastReqCnt >= upstream_loss)
  {
    /* Store some stats.. */
    int32_t num = insertTransId(&stunRequest.msgHdr.id);

    StunServer_SendConnectivityBindingResp(clientData,
                                           config->sockfd,
                                           stunRequest.msgHdr.id,
                                           PASSWORD,
                                           from_addr,
                                           from_addr,
                                           lastReqCnt,
                                           num,
                                           enf_flags,
                                           enf_nodeCnt + 1,
                                           enf_upMaxBandwidth,
                                           enf_downMaxBandwidth,
                                           NULL,
                                           sendPacket,
                                           SOCK_DGRAM,
                                           false,
                                           200);
  }
  else
  {
    printf("Weird...\n");
  }

}