Esempio n. 1
0
    void listenForClients()
    {
        listener_ = openListener(port_);
        maximumClientDescriptor_ = listener_;
        FD_SET(listener_, &clientsSet_);

        while(true)
        {
            temporarySet_ = clientsSet_;
            select(maximumClientDescriptor_+1, &temporarySet_, NULL, NULL, NULL);

            if(FD_ISSET(listener_, &temporarySet_))
            {
                std::cout << "New client connection..." << std::endl;
                struct sockaddr_in addr;
                socklen_t len = sizeof(addr);
                SSL *ssl;

                int client = accept(listener_, (struct sockaddr*)&addr, &len);  
                ssl = SSL_new(serverContext_);  

                SSL_set_fd(ssl, client);

                if ( SSL_accept(ssl) == FAIL )
                {
                    ERR_print_errors_fp(stderr);
                }

                ClientDesc desc;
                desc.descriptor = client;
                desc.ssl = ssl;

                std::cout << "Connected client real name: " << getClientCN(ssl) << std::endl;
                desc.canBroadcast = isNameOnBroadcastList(getClientCN(ssl));

                clientDescriptors_[client] = desc;
                FD_SET(client, &clientsSet_);
                if(client > maximumClientDescriptor_) maximumClientDescriptor_ = client;
            }

            for (auto client : clientDescriptors_)
            {
                temporarySet_ = clientsSet_;
                select(maximumClientDescriptor_+1, &temporarySet_, NULL, NULL, NULL);
                if(FD_ISSET(client.second.descriptor, &temporarySet_))
                {
                    serveClient(client.second);
                }
            }
        }
    }
Esempio n. 2
0
int main(int argc, char *argv[]){
	struct sockaddr_in serverAddr, clientAddr;	/*server and client addr*/
	int serverport; 				/*server port*/
	int serverfd,clientfd;
	unsigned int addrLength;
	
	if (argc>2){
		fprintf(stderr,"Usage: %s <server port>\n",argv[0]);
		exit(SUCCESS);
	}
	if(argv[1] == NULL)
		serverport = SERVER_PORT;
	else serverport = atoi(argv[1]);

	serverfd = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
	
	if(serverfd < 0){
		serverErr("Socket() creation failed!");
	}
	
	memset(&serverAddr, 0, sizeof(serverAddr));
	serverAddr.sin_family = AF_INET;
	serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
	serverAddr.sin_port = htons(serverport);
	
	if(bind(serverfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0)
		serverErr("Failed to bind()");
	if(listen(serverfd, MAXPENDING) < 0)
		serverErr("Failed to listen()");

	while(1){
		addrLength = sizeof(clientAddr);
		if((clientfd = accept(serverfd, (struct sockaddr *)&clientAddr,&addrLength)) < 0)
			serverErr("Failed to accept()");

		serveClient(clientfd, (struct sockaddr_in *) &clientAddr);
	}
//return 0; no exit => server runs forever
}
Esempio n. 3
0
int main(int argc, char* argv[])
{

  if (!(argc == 3 && isnumber(argv[1])))
  {
    printf("Usage:\n");
    return EXIT_FAILURE;
  }
  int port = atoi(argv[1]);
  struct stat sb;
  if (!(stat(argv[2],&sb) == 0 && S_ISDIR(sb.st_mode)))
  {
    fprintf(stderr,"Folder does not exist\n");
    return EXIT_FAILURE;
  }



  int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  if (sockfd<0)
  {
    fprintf(stderr,"socket error: %s\n",strerror(errno));
    return EXIT_FAILURE;
  }

  struct sockaddr_in serverAddr;
  memset(&serverAddr, 0, sizeof(struct sockaddr_in));
  serverAddr.sin_family = AF_INET;
  serverAddr.sin_port = htons(port);
  serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);


  if (bind(sockfd,(struct sockaddr*)&serverAddr,sizeof(serverAddr)) < 0)
  {
    fprintf(stderr,"bind error: %s\n",strerror(errno));
    return EXIT_FAILURE;
  }

  if (listen(sockfd, 64) < 0)
  {
    fprintf(stderr,"listen error: %s\n",strerror(errno));
    return EXIT_FAILURE;
  }

  printf("starting Kwasne Powidelko Server v0.6.6.6\n");
  while (1)
  {
    int connSockfd = accept(sockfd, NULL, NULL);
    int cpid = fork();
    if (cpid==0)
    {
      printf("new connection, waiter ID: %d\n",getpid());
      int serveRes = serveClient(connSockfd, argv[2]);
      shutdown(connSockfd,SHUT_RDWR);
      close(connSockfd);
      if (serveRes<0)
        printf("waiter %d terminating after a failure\n",getpid());
      else
        printf("waiter %d terminating with success\n",getpid());
      return EXIT_SUCCESS;
    }
    if (cpid<0)
    {
      fprintf(stderr,"fork error: %s\n",strerror(errno));
    }
  }
}
Esempio n. 4
0
int main(int argc, char* argv[]){
    char* host = "127.0.0.1";
    if (argc != 2){
        std::cerr << "Usage: client <host>" << std::endl;
        return 1;
    }else{
        host = argv[1];
    }
    PaStreamParameters outputParameters;
    PaStream *stream;
    PaError err;
    sAudioBuffer* audiobuf;
    audiobuf = new sAudioBuffer();
    audiobuf->dec = opus_decoder_create(SAMPLE_RATE, 2, &audiobuf->error);
    if(audiobuf->error != OPUS_OK){
        std::cerr << "opus: could not create decoder" << std::endl;
        return 2;
    }

    printf("SR = %d, BufSize = %d\n", SAMPLE_RATE, FRAMES_PER_BUFFER);


    audiobuf->readerIndex = 0;

    err = Pa_Initialize();
    if( err != paNoError ) goto error;

    outputParameters.device = Pa_GetDefaultOutputDevice();
    if (outputParameters.device == paNoDevice){
        fprintf(stderr,"Error: No default output device.\n");
        goto error;
    }
    outputParameters.channelCount = 2;
    outputParameters.sampleFormat = paFloat32;
    outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency;
    outputParameters.hostApiSpecificStreamInfo = NULL;

    err = Pa_OpenStream(
            &stream,
            NULL,
            &outputParameters,
            SAMPLE_RATE,
            FRAMES_PER_BUFFER,
            paClipOff,
            audioCallback,
            audiobuf);
    if( err != paNoError ) goto error;


    err = Pa_SetStreamFinishedCallback( stream, &StreamFinished );
    if( err != paNoError ) goto error;

    err = Pa_StartStream( stream );
    if( err != paNoError ) goto error;



    try{
        serveClient(host, audiobuf);
    }catch (std::exception& e){
        std::cerr << e.what() << std::endl;
    }


    err = Pa_StopStream( stream );
    if( err != paNoError ) goto error;

    err = Pa_CloseStream( stream );
    if( err != paNoError ) goto error;

    Pa_Terminate();

    delete audiobuf;
    return 0;
error:
    Pa_Terminate();
    fprintf( stderr, "An error occured while using the portaudio stream\n" );
    fprintf( stderr, "Error number: %d\n", err );
    fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) );
    return err;
}