Exemple #1
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;
}
static void teardownIPv6 (void)
{
    stunResult = StunResult_Empty; 
    StunClient_free(stunInstance);
}