Beispiel #1
0
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) );

}
static void setupIPv6 (void)
{
    stunResult = StunResult_Empty; 
    runningAsIPv6 = true;
    sockaddr_initFromString((struct sockaddr*)&stunServerAddr, "[2001:470:dc88:2:226:18ff:fe92:6d53]:3478");
    StunClient_Alloc(&stunInstance);

}
static void setup (void)
{
    stunResult = StunResult_Empty; 
    runningAsIPv6 = false;
    sockaddr_initFromString((struct sockaddr*)&stunServerAddr, "193.200.93.152:3478");

    StunClient_Alloc(&stunInstance);

}
Beispiel #4
0
CTEST(stuntrace, null_ptr)
{
  int               someData   = 3;
  STUN_CLIENT_DATA* clientData = NULL;

  struct sockaddr_storage localAddr, remoteAddr;
  int                     sockfd = 4;

  sockaddr_initFromString( (struct sockaddr*)&remoteAddr,
                           "193.200.93.152:45674" );

  sockaddr_initFromString( (struct sockaddr*)&localAddr,
                           "192.168.1.34:45674" );




  int len = StunTrace_startTrace(clientData,
                                 &someData,
                                 (const struct sockaddr*)&remoteAddr,
                                 (const struct sockaddr*)&localAddr,
                                 sockfd,
                                 "test",
                                 "tset",
                                 1,
                                 StunTraceCallBack,
                                 sendPacket);

  ASSERT_TRUE(len == 0);

  StunClient_Alloc(&clientData);

  len = StunTrace_startTrace(clientData,
                             &someData,
                             (const struct sockaddr*)&remoteAddr,
                             (const struct sockaddr*)&localAddr,
                             sockfd,
                             "test",
                             "tset",
                             1,
                             StunTraceCallBack,
                             NULL);
  ASSERT_TRUE(len == 0);

  len = StunTrace_startTrace(clientData,
                             &someData,
                             NULL,
                             (const struct sockaddr*)&localAddr,
                             sockfd,
                             "test",
                             "tset",
                             1,
                             StunTraceCallBack,
                             sendPacket);
  ASSERT_TRUE(len == 0);
}
Beispiel #5
0
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) );

}
Beispiel #6
0
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) );

}
Beispiel #7
0
int
main(void)
{
  struct addrinfo*        servinfo, * p;
  int                     numbytes;
  struct sockaddr_storage their_addr;
  unsigned char           buf[MAXBUFLEN];

  StunMessage            stunRequest;
  STUN_INCOMING_REQ_DATA pReq;

  pthread_t socketListenThread;

  STUN_CLIENT_DATA*   clientData;
  struct listenConfig listenConfig;

  StunClient_Alloc(&clientData);

  signal(SIGINT, teardown);

  sockfd = createSocket(NULL, MYPORT, AI_PASSIVE, servinfo, &p);

  listenConfig.socketConfig[0].tInst  = clientData;
  listenConfig.socketConfig[0].sockfd = sockfd;
  listenConfig.socketConfig[0].user   = NULL;
  listenConfig.socketConfig[0].pass   = PASSWORD;
  listenConfig.stun_handler           = stunHandler;
  listenConfig.numSockets             = 1;



  pthread_create(&socketListenThread,
                 NULL,
                 socketListenDemux,
                 (void*)&listenConfig);

  while (1)
  {
    printf("stunserver: waiting to recvfrom...\n");

    sleep(1000);
  }
}
Beispiel #8
0
int
main(int   argc,
     char* argv[])
{
  //struct addrinfo*        servinfo;
  //int                     numbytes;
  //struct sockaddr_storage their_addr;
  //unsigned char           buf[MAXBUFLEN];
  struct sockaddr_storage localAddr;
  char                    interface[10];
  int port;

  //StunMessage            stunRequest;
  //STUN_INCOMING_REQ_DATA pReq;

  pthread_t socketListenThread;

  STUN_CLIENT_DATA*   clientData;
  struct listenConfig listenConfig;

  StunClient_Alloc(&clientData);

  signal(SIGINT, teardown);
  int                 c;
  /* int                 digit_optind = 0; */
  /* set config to default values */
  strncpy(interface, "default", 7);
  port         = 3478;

  static struct option long_options[] = {
    {"interface", 1, 0, 'i'},
    {"port", 1, 0, 'p'},
    {"help", 0, 0, 'h'},
    {"version", 0, 0, 'v'},
    {NULL, 0, NULL, 0}
  };
  if (argc < 1)
  {
    printUsage();
    exit(0);
  }
  int option_index = 0;
  while ( ( c = getopt_long(argc, argv, "hvi:p:j:m:M:w:r:",
                            long_options, &option_index) ) != -1 )
  {
    /* int this_option_optind = optind ? optind : 1; */
    switch (c)
    {
    case 'i':
      strncpy(interface, optarg, max_iface_len);
      break;
    case 'p':
      port = atoi(optarg);
      break;
    case 'h':
      printUsage();
      break;
    case 'v':
      printf("Version %s\n", VERSION_SHORT);
      exit(0);
      break;
    default:
      printf("?? getopt returned character code 0%o ??\n", c);
    }
  }

  if ( !getLocalInterFaceAddrs( (struct sockaddr*)&localAddr,
                                interface,
                                AF_INET,
                                IPv6_ADDR_NORMAL,
                                false ) )
  {
    printf("Error getting IPaddr on %s\n", interface);
    exit(1);
  }

  //sockfd = createSocket(NULL, MYPORT, AI_PASSIVE, servinfo, &p);
  sockfd = createLocalSocket(AF_INET,
                             (struct sockaddr*)&localAddr,
                             SOCK_DGRAM,
                             port);

  listenConfig.tInst  = clientData;
  listenConfig.socketConfig[0].sockfd = sockfd;
  listenConfig.socketConfig[0].user   = NULL;
  listenConfig.socketConfig[0].pass   = PASSWORD;
  listenConfig.stun_handler           = stunHandler;
  listenConfig.numSockets             = 1;



  pthread_create(&socketListenThread,
                 NULL,
                 socketListenDemux,
                 (void*)&listenConfig);

  while (1)
  {
    printf("stunserver: waiting to recvfrom...\n");

    sleep(1000);
  }
}
Beispiel #9
0
CTEST(stuntrace, run_IPv4_Stunresp_max_ttl)
{
  int               someData = 3;
  STUN_CLIENT_DATA* clientData;

  struct sockaddr_storage localAddr, remoteAddr, hop1Addr;
  int                     sockfd = 4;

  sockaddr_initFromString( (struct sockaddr*)&remoteAddr,
                           "193.200.93.152:45674" );

  sockaddr_initFromString( (struct sockaddr*)&localAddr,
                           "192.168.1.34:45674" );

  StunClient_Alloc(&clientData);


  int len = StunTrace_startTrace(clientData,
                                 &someData,
                                 (const struct sockaddr*)&remoteAddr,
                                 (const struct sockaddr*)&localAddr,
                                 sockfd,
                                 "test",
                                 "tset",
                                 1,
                                 StunTraceCallBack,
                                 sendPacket);
  /* First alive probe */
  ASSERT_TRUE(len != 0);
  ASSERT_TRUE(LastTTL == 40);
  StunMessage m;
  memset( &m, 0, sizeof(m) );
  memcpy( &m.msgHdr.id,     &LastTransId, STUN_MSG_ID_SIZE);
  memcpy( &m.msgHdr.cookie, StunCookie,   sizeof(m.msgHdr.cookie) );
  m.msgHdr.msgType                = STUN_MSG_BindResponseMsg;
  m.hasXorMappedAddress           = true;
  m.xorMappedAddress.familyType   = STUN_ADDR_IPv4Family;
  m.xorMappedAddress.addr.v4.addr = test_addr_ipv4;
  m.xorMappedAddress.addr.v4.port = test_port_ipv4;

  StunClient_HandleIncResp(clientData,
                           &m,
                           NULL);

  /*Timeout is roughtly 160*50 ms*/
  for (int i = 0; i < 160 * 38; i++)
  {
    StunClient_HandleTick(clientData, 50);
  }

  /* First hop.. */
  ASSERT_TRUE(LastTTL == 39);
  sockaddr_initFromString( (struct sockaddr*)&hop1Addr,
                           "192.168.1.1:45674" );
  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop1Addr,
                        11);
  ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr,
                               (struct sockaddr*)&hop1Addr ) );

  ASSERT_TRUE( Done);
  ASSERT_TRUE( EndOfTrace);

}
Beispiel #10
0
CTEST(stuntrace, run_IPv4_Stunresp_dead)
{
  int               someData = 3;
  STUN_CLIENT_DATA* clientData;

  struct sockaddr_storage localAddr, remoteAddr, hop1Addr;
  int                     sockfd = 4;

  sockaddr_initFromString( (struct sockaddr*)&remoteAddr,
                           "193.200.93.152:45674" );

  sockaddr_initFromString( (struct sockaddr*)&localAddr,
                           "192.168.1.34:45674" );

  StunClient_Alloc(&clientData);


  StunTrace_startTrace(clientData,
                       &someData,
                       (const struct sockaddr*)&remoteAddr,
                       (const struct sockaddr*)&localAddr,
                       sockfd,
                       "test",
                       "tset",
                       1,
                       StunTraceCallBack,
                       sendPacket);

  /*Timeout is roughtly 160*50 ms*/
  for (int i = 0; i < 160; i++)
  {
    StunClient_HandleTick(clientData, 50);
  }

  /* First hop.. */
  ASSERT_TRUE(LastTTL == 1);
  sockaddr_initFromString( (struct sockaddr*)&hop1Addr,
                           "192.168.1.1:45674" );
  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop1Addr,
                        11);
  ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr,
                               (struct sockaddr*)&hop1Addr ) );

  ASSERT_TRUE( LastTTL == 2);

  for (int i = 0; i < 160; i++)
  {
    StunClient_HandleTick(clientData, 50);
  }
  ASSERT_TRUE(LastTTL == 3);

  for (int i = 0; i < 160; i++)
  {
    StunClient_HandleTick(clientData, 50);
  }
  ASSERT_TRUE(LastTTL == 4);

  for (int i = 0; i < 160; i++)
  {
    StunClient_HandleTick(clientData, 50);
  }
  ASSERT_TRUE(LastTTL == 5);

  for (int i = 0; i < 160; i++)
  {
    StunClient_HandleTick(clientData, 50);
  }
  ASSERT_TRUE(LastTTL == 5);

  ASSERT_TRUE(Done);
  ASSERT_TRUE(EndOfTrace);
}
Beispiel #11
0
CTEST(stuntrace, no_answer_recurring_IPv4)
{
  int               someData = 3;
  STUN_CLIENT_DATA* clientData;

  struct sockaddr_storage localAddr, remoteAddr, hop1Addr, hop2Addr;
  int                     sockfd = 4;

  sockaddr_initFromString( (struct sockaddr*)&remoteAddr,
                           "193.200.93.152:45674" );

  sockaddr_initFromString( (struct sockaddr*)&localAddr,
                           "192.168.1.34:45674" );

  StunClient_Alloc(&clientData);


  int len = StunTrace_startTrace(clientData,
                                 &someData,
                                 (const struct sockaddr*)&remoteAddr,
                                 (const struct sockaddr*)&localAddr,
                                 sockfd,
                                 "test",
                                 "tset",
                                 2,
                                 StunTraceCallBack,
                                 sendPacket);
  ASSERT_TRUE(len != 0);

  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&remoteAddr,
                        3);

  /* HOP 1 Answer */
  ASSERT_TRUE(LastTTL == 1);

  sockaddr_initFromString( (struct sockaddr*)&hop1Addr,
                           "192.168.1.1:45674" );
  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop1Addr,
                        11);
  ASSERT_FALSE(Done);
  ASSERT_FALSE(EndOfTrace);

  ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr,
                               (struct sockaddr*)&hop1Addr ) );
  /* HOP 2 No Answer */
  ASSERT_TRUE( LastTTL == 2);


  ASSERT_TRUE( LastTTL == 2);
  /*Timeout is roughtly 160*50 ms*/
  for (int i = 0; i < 160; i++)
  {
    StunClient_HandleTick(clientData, 50);
  }
  ASSERT_FALSE(Done);
  ASSERT_FALSE(EndOfTrace);

  /* HOP 3 Answer */
  ASSERT_TRUE(LastTTL == 3);

  sockaddr_initFromString( (struct sockaddr*)&hop2Addr,
                           "193.200.93.152:45674" );

  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop2Addr,
                        3);

  ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr,
                               (struct sockaddr*)&hop2Addr ) );

  ASSERT_FALSE(Done);
  ASSERT_TRUE(EndOfTrace);

  /* HOP 1 Answer */
  ASSERT_TRUE(LastTTL == 1);

  sockaddr_initFromString( (struct sockaddr*)&hop1Addr,
                           "192.168.1.1:45674" );
  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop1Addr,
                        11);
  ASSERT_FALSE(Done);
  ASSERT_FALSE(EndOfTrace);

  ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr,
                               (struct sockaddr*)&hop1Addr ) );


  /* HOP 3 Answer */
  ASSERT_TRUE(LastTTL == 3);

  sockaddr_initFromString( (struct sockaddr*)&hop2Addr,
                           "193.200.93.152:45674" );

  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop2Addr,
                        3);

  ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr,
                               (struct sockaddr*)&hop2Addr ) );

  ASSERT_TRUE( Done);
  ASSERT_TRUE( EndOfTrace);

}
Beispiel #12
0
CTEST(stuntrace, recurring_IPv4)
{
  int               someData = 3;
  STUN_CLIENT_DATA* clientData;

  struct sockaddr_storage localAddr, remoteAddr, hop1Addr, hop2Addr;
  int                     sockfd = 4;

  sockaddr_initFromString( (struct sockaddr*)&remoteAddr,
                           "193.200.93.152:45674" );

  sockaddr_initFromString( (struct sockaddr*)&localAddr,
                           "192.168.1.34:45674" );

  StunClient_Alloc(&clientData);


  int len = StunTrace_startTrace(clientData,
                                 &someData,
                                 (const struct sockaddr*)&remoteAddr,
                                 (const struct sockaddr*)&localAddr,
                                 sockfd,
                                 "test",
                                 "tset",
                                 2,
                                 StunTraceCallBack,
                                 sendPacket);
  ASSERT_TRUE(len != 0);
  ASSERT_TRUE(LastTTL == 40);

  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&remoteAddr,
                        3);

  sockaddr_initFromString( (struct sockaddr*)&hop1Addr,
                           "192.168.1.1:45674" );
  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop1Addr,
                        11);
  ASSERT_FALSE(Done);
  ASSERT_FALSE(EndOfTrace);

  ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr,
                               (struct sockaddr*)&hop1Addr ) );

  ASSERT_TRUE( LastTTL == 2);

  sockaddr_initFromString( (struct sockaddr*)&hop2Addr,
                           "193.200.93.152:45674" );

  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop2Addr,
                        3);
  ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr,
                               (struct sockaddr*)&hop2Addr ) );
  ASSERT_FALSE(Done);
  ASSERT_TRUE(EndOfTrace);

  ASSERT_TRUE(LastTTL == 1);
  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop1Addr,
                        11);
  ASSERT_FALSE(Done);
  ASSERT_FALSE(EndOfTrace);

  ASSERT_TRUE(LastTTL == 2);

  StunClient_HandleICMP(clientData,
                        (struct sockaddr*)&hop2Addr,
                        3);
  ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr,
                               (struct sockaddr*)&hop2Addr ) );

  ASSERT_TRUE( Done);
  ASSERT_TRUE( EndOfTrace);
}
Beispiel #13
0
int
main(int   argc,
     char* argv[])
{
  struct sockaddr_storage localAddr;
  char                    interface[10];
  int                     port;

  transIDSinUse = 0;

  pthread_t socketListenThread;
  pthread_t cleanupThread;

  STUN_CLIENT_DATA*   clientData;
  struct listenConfig listenConfig;

  StunClient_Alloc(&clientData);
  /* StunClient_RegisterLogger(clientData, */
  /*                          stundbg, */
  /*                          NULL); */

  signal(SIGINT, teardown);
  int c;
  /* int                 digit_optind = 0; */
  /* set config to default values */
  strncpy(interface, "default", 7);
  port          = 3478;
  upstream_loss = 0;

  static struct option long_options[] = {
    {"interface", 1, 0, 'i'},
    {"port", 1, 0, 'p'},
    {"upstream", 1, 0, 'u'},
    {"csv", 0, 0, '2'},
    {"help", 0, 0, 'h'},
    {"version", 0, 0, 'v'},
    {NULL, 0, NULL, 0}
  };
  if (argc < 1)
  {
    printUsage();
    exit(0);
  }
  int option_index = 0;
  while ( ( c = getopt_long(argc, argv, "h2vi:p:m:u:",
                            long_options, &option_index) ) != -1 )
  {
    /* int this_option_optind = optind ? optind : 1; */
    switch (c)
    {
    case 'i':
      strncpy(interface, optarg, max_iface_len);
      break;
    case 'p':
      port = atoi(optarg);
      break;
    case 'u':
      upstream_loss = atoi(optarg);
      break;
    case '2':
      csv_output = true;
      break;
    case 'h':
      printUsage();
      break;
    case 'v':
      printf("Version %s\n", VERSION_SHORT);
      exit(0);
      break;
    default:
      printf("?? getopt returned character code 0%o ??\n", c);
    }
  }

  if ( !getLocalInterFaceAddrs( (struct sockaddr*)&localAddr,
                                interface,
                                AF_INET,
                                IPv6_ADDR_NORMAL,
                                false ) )
  {
    printf("Error getting IPaddr on %s\n", interface);
    exit(1);
  }

  /* sockfd = createSocket(NULL, MYPORT, AI_PASSIVE, servinfo, &p); */
  sockfd = createLocalSocket(AF_INET,
                             (struct sockaddr*)&localAddr,
                             SOCK_DGRAM,
                             port);
  pthread_mutex_init(&mutexTransId, NULL);
  pthread_create(&cleanupThread, NULL, transIDCleanup, (void*)transIDs);

  listenConfig.tInst                  = clientData;
  listenConfig.socketConfig[0].sockfd = sockfd;
  listenConfig.socketConfig[0].user   = NULL;
  listenConfig.socketConfig[0].pass   = PASSWORD;
  listenConfig.stun_handler           = stunHandler;
  listenConfig.numSockets             = 1;

  pthread_create(&socketListenThread,
                 NULL,
                 socketListenDemux,
                 (void*)&listenConfig);
  pause();

}
Beispiel #14
0
int
main(int   argc,
     char* argv[])
{
  struct prg_data        prg;
  struct sigListenConfig lconf;
  prg.sigData  = calloc( 1, sizeof(struct sig_data) );
  prg.mediaCnf = calloc( 1, sizeof(struct mediaConfig) );
  /* struct mediaConfig     mconf; */
  /* struct addrinfo     servinfo, * p; */

  /* Intializes random number generator */
  time_t t;
  srand( (unsigned) time(&t) );

  /* struct sockaddr_storage taddr; */
  /* Set up the pointer(s).. */
  lconf.prg = &prg;
  /* lconf.mconf = &mconf; */

  pthread_t sigSocketListenThread;

  pthread_t stunTickThread;
  pthread_t iceTickThread;
  /* pthread_t turnTickThread; */

  if (argc < 3)
  {
    fprintf(stderr,"usage: icebox hostname user remoteuser\n");
    exit(1);
  }

  lconf.sigsock             = createTcpSocket(argv[1], SERVERPORT);
  lconf.signal_path_handler = signalPathHandler;

  /* lconf.msock = createUdpSocket(argv[1], */
  /*                              STUNPORT, */
  /*                              "turnclient", */
  /*                              0, */
  /*                              &servinfo, */
  /*                              &p); */
  /* if (lconf.msock == -1) */
  /* { */
  /*  return 1; */
  /* } */
  /* else if (lconf.msock == -2) */
  /* { */
  /*  return 2; */
  /* } */
  pthread_create(&sigSocketListenThread, NULL, sigSocketListen, (void*)&lconf);

  strncpy(prg.user, argv[2], MAX_USER_LEN);

  registerUser(&prg.sigData->state, lconf.sigsock, prg.user);

  /* Setup ICE */
  ICELIB_CONFIGURATION iceConfig;
  iceConfig.tickIntervalMS       = 20;
  iceConfig.keepAliveIntervalS   = 15;
  iceConfig.maxCheckListPairs    = ICELIB_MAX_PAIRS;
  iceConfig.aggressiveNomination = false;
  iceConfig.iceLite              = false;
  iceConfig.logLevel             = ICELIB_logDebug;
  /* iceConfig.logLevel = ICELIB_logDisable; */

  prg.mediaCnf->icelib = malloc( sizeof(ICELIB_INSTANCE) );
  ICELIB_Constructor(prg.mediaCnf->icelib,
                     &iceConfig);

  /* ICELIB_setCallbackLog(prg.mediaCnf->icelib, */
  /*                     ICELIB_printLog, */
  /*                     NULL, */
  /*                     ICELIB_logDebug); */

  ICELIB_setCallbackOutgoingBindingRequest(prg.mediaCnf->icelib,
                                           sendConnectivityCheck,
                                           &prg);

  ICELIB_setCallbackOutgoingBindingResponse(prg.mediaCnf->icelib,
                                            sendConnectivityResp,
                                            &prg);
  ICELIB_setCallbackConnecitivityChecksComplete(prg.mediaCnf->icelib,
                                                complete,
                                                &prg);
  ICELIB_setCallbackNominated(prg.mediaCnf->icelib,
                              nominated,
                              &prg);
  ICELIB_setCallbackOutgoingCancelRequest(prg.mediaCnf->icelib,
                                          cancelSTUNtrans,
                                          &prg);
  /* Setup stun */
  StunClient_Alloc(&prg.mediaCnf->stunInstance);

  /* StunClient_RegisterLogger(prg.mediaCnf->stunInstance, */
  /*                          stunLog, */
  /*                          &prg); */

  /* Signal path set up, time to gather the candidates */
  /* Turn setup */



  /* if ( 0 != getSockaddrFromFqdn( (struct sockaddr*)&taddr, argv[1] ) ) */
  /* { */
  /*  printf("Error getting TURN Server IP\n"); */
  /*  return 1; */
  /* } */

  /* TurnClient_StartAllocateTransaction(&lconf.turnInst, */
  /*                                    50, */
  /*                                    turnInfoFunc, */
  /*                                    "icebox", */
  /*                                      &lconf.msock, / * *userCtx * / */
  /*                                    (struct sockaddr*)&taddr, */
  /* /                                  "test\0", / *argv[2],* / */
  /*                                "pass\0", / *argv[2],* / */
  /*                              AF_INET, */
  /*                            turnSendFunc, */
  /*                          turnCbFunc, */
  /*                        false, */
  /*                      0); */


  /* pthread_create(&turnTickThread, NULL, tickTurn, (void*)lconf.turnInst); */
  pthread_create(&stunTickThread, NULL, tickStun,
                 (void*)prg.mediaCnf->stunInstance);
  pthread_create(&iceTickThread,  NULL, tickIce, (void*)prg.mediaCnf->icelib);

  if (argc == 4)
  {
    /* Ok got nothing better to do. Busywaiting */
    while (prg.sigData->state != REGISTERED)
    {
    }

    char* sdp = NULL;
    harvest(prg.mediaCnf->icelib);
    printf("Completed harvesting\n");
    crateCandidateJson(prg.mediaCnf->icelib, &sdp);

    /* Start to listen here.. */
    pthread_create(&prg.mediaCnf->mSocketListenThread, NULL, mSocketListen,
                   (void*)prg.mediaCnf);
    inviteUser(&prg.sigData->state, lconf.sigsock, argv[3], prg.user, sdp);

    if (sdp != NULL)
     {
     free(sdp);
     }

  }


  /* Just wait a bit for now.. */
  sleep(100);
  printf("Done sleeping teardown\n");
  close(lconf.sigsock);
  StunClient_free(prg.mediaCnf->stunInstance);
  free(prg.mediaCnf);
  free(prg.sigData->sdp);
  free(prg.sigData->msgBuf);
  free(prg.sigData);
  return 0;
}