Exemple #1
0
void RWLock::unlock_read()
{
	// repeatedly try to remove a reader (ignoring write lock)
	unsigned int old_rw = m_rw;
	unsigned int new_rw = mkrw(readers(old_rw) - 1, writing(old_rw));
	while (!m_rw.compare_exchange_weak(old_rw, new_rw))
	{
		new_rw = mkrw(readers(old_rw) - 1, writing(old_rw));
	}
}
Exemple #2
0
void CPollingThread::doPoll()
{
    //qDebug() << state;
    switch (state) {
    case CSerialPortPrivate::STATE_REQUESTING:
        requesting();
        break;
    case CSerialPortPrivate::STATE_WRITING:
        writing();
        break;
    case CSerialPortPrivate::STATE_POLLING:
        polling();
        break;
    case CSerialPortPrivate::STATE_READING:
        reading();
        break;
    case CSerialPortPrivate::STATE_NOTIFY_DATA:
        notifying();
        break;
    case CSerialPortPrivate::STATE_NOTIFY_TIMEOUT:
        notifyingTimeout();
        break;
    default:
        break;
    }

    usleep(100);
}
Exemple #3
0
void ot_receiver_test(SIMPLEOT_RECEIVER * receiver, int sockfd)
{
	int i, j, k;

	unsigned char Rs_pack[ 4 * PACKBYTES ];
	unsigned char keys[ 4 ][ HASHBYTES ];
	unsigned char cs[ 4 ];

	//

	reading(sockfd, receiver->S_pack, sizeof(receiver->S_pack));
	receiver_procS(receiver);

	//

	receiver_maketable(receiver);

	for (i = 0; i < NOTS; i += 4)
	{
		simpleot_randombytes(cs, sizeof(cs));

		for (j = 0; j < 4; j++)
		{ 
			cs[j] &= 1;

			if (VERBOSE) printf("%4d-th choose bit = %d\n", i+j, cs[j]);
		}

		receiver_rsgen(receiver, Rs_pack, cs);

		writing(sockfd, Rs_pack, sizeof(Rs_pack));

		receiver_keygen(receiver, keys);
	
		//

		if (VERBOSE)
		{
			for (j = 0; j < 4; j++)
			{
				printf("%4d-th reciever key:", i+j);

				for (k = 0; k < HASHBYTES; k++) printf("%.2X", keys[j][k]);
				printf("\n");
			}
		}
	}
}
Exemple #4
0
int main(int argc, char* argv[])
{
   if (argc<2) 
   {  
      std::cerr << "Not enough arguments." << std::endl;
      return 0;
   }
   if (strcmp(argv[1], "writing") == 0)
   {
      writing(argv[2], argv[3], argv[4]);
   }
   if (strcmp(argv[1], "reading") == 0)
   {
      reading(argv[2]);
   }
   if (strcmp(argv[1], "help") == 0)
   {
      help();
   }
}
Exemple #5
0
void ot_sender_test(SIMPLEOT_SENDER * sender, int newsockfd)
{
	int i, j, k;
	unsigned char S_pack[ PACKBYTES ];
	unsigned char Rs_pack[4 * PACKBYTES];
	unsigned char keys[ 2 ][ 4 ][ HASHBYTES ];

	//

	sender_genS(sender, S_pack);
	writing(newsockfd, S_pack, sizeof(S_pack));

	//

	for (i = 0; i < NOTS; i += 4)
	{
		reading(newsockfd, Rs_pack, sizeof(Rs_pack));

		sender_keygen(sender, Rs_pack, keys);

		//

		if (VERBOSE)
		{
			for (j = 0; j < 4; j++)
			{
				printf("%4d-th sender keys:", i+j);
	
				for (k = 0; k < HASHBYTES; k++) printf("%.2X", keys[0][j][k]);
				printf(" ");
				for (k = 0; k < HASHBYTES; k++) printf("%.2X", keys[1][j][k]);
				printf("\n");
			}

			printf("\n");
		}
	}
}
Exemple #6
0
int 
main (int argc, char *argv[])
{
	int choice;
	
	printf("Welcome! Choose the operation you want to perform:\n1: Read\n2: Write\n");
	scanf("%d", &choice);
	
	switch (choice)	{
		case 1:
			printf("Reading.\n");
			reading();
			break;
		case 2:
			printf("Writing.\n");
			writing();
			break;
		default:
			printf("Wrong choice, exiting.\n");
			break;
	}
	
	return 0;
}
Exemple #7
0
// CommunicationCenter reads HTTP message and writes the HTTP answer to client
void Server::communicationCenter(int connection) {
	//first read, then respond appriopiately
	try {
	string dataReceived=reading(connection);
    	string json;
	int HTTPcode;
        if (dataReceived[0] == 'P') { // POST
            Document document;
            cout << "parsuje" << endl;
            parsingJSONToDocument(document, dataReceived);

            if (document.HasMember("addresses")) {
                Task task;
                parsingAddressesJSONToTask(document, task);

                cout << "CommunicationCenter, Task nr: " << task.taskNumber << endl;

                for (int i=0; i<task.size; i++) {
                    cout << "ip[" << i << "]: " <<task.ip[i] << endl;

										Packet packet;
										packet.ip_address =task.ip[i];
										packet.identifier = task.taskNumber;
										packet.iterator = i;
                                        if (i+1 == task.size)
                                            packet.isLast = true;
                                        else
                                            packet.isLast = false;

										queueInto->push(packet);
                }

                json = createResponseToAddressesJSON(task.taskNumber, HTTPcode);

                writeJSON(connection, json, HTTPcode);
            }
            else if (document.HasMember("tasks")) {
                list<long long int> tasksList;

                cout << "parsujetoTask" << endl;

                parsingTasksJSONToParsedData(document, tasksList);
                list<Result> results;

                cout << "tworze resulty" << endl;

                while (!tasksList.empty()) {
                    cout << tasksList.front() << endl;

                    results.push_back(dataReciver->getData(tasksList.front()));
                    tasksList.pop_front();
                }

                cout << "creatuje" << endl;

                json = createResponseToTasksJSON(results, HTTPcode);

                cout << "wysylam" << endl;

                writeJSON(connection, json, HTTPcode);

                cout << "wyslalem" << endl;
            }
        }
        else if (dataReceived[0] == 'G') { // GET
            writing(connection);
        }
        else {
            writing(connection);
        }
    }
    catch (string e) {
	if(e==string("MESSAGE TOO LARGE")) {
		string json = "{\"error\":\"MESSAGE TOO LARGE\"}";
		writeJSON(connection,json,400);
	}
	else {
        	string json = "{\"error\":\"WRONG JSON STRUCTURE\"}";
        	writeJSON(connection, json, 400);
	}
    }

	return;
}
Exemple #8
0
int main(int argc, char** argv)
{
	char ip_buff[16];
	unsigned int port_cible;
	struct sockaddr_in cible;
	struct sockaddr_in my_infos;
	unsigned int sizeof_my_infos=sizeof(my_infos);
	int sock;
	
	short cont;
	char buff[BUF_LEN];
	
	cible.sin_family=AF_INET;
	
	print("Client générique v1.0\n\n");
	
	//choix de l'ip du serveur cible
	cont=0; //pas d'ip correcte
	while(!(cont!=0))//tant que pas d'ip correcte
	{
		//demande d'une IP d'une IP
		print("Ip à contacter -> ");
		scanf("%15s", ip_buff);
		flush();
		//convertion en adresse
		cont=inet_aton(ip_buff, (struct in_addr*) &cible.sin_addr);
		if(cont==0)
		{ //ip incorrecte
			print("Ip entrée incorrecte, recommencez :\n");
		}
		else
		{  print("Ip correcte\n"); }
	}
	//demande d'un port de connexion
	print("Port de connexion -> ");
	scanf("%6ud", &port_cible);
	flush();
	cible.sin_port=htons(port_cible);
	
	//affichage
	print("\nConnection au serveur ");
	aff_info(&cible);
	print(" ...\n");
	
	//création du socket
	sock=socket(AF_INET, SOCK_STREAM, 0);
	if(sock==-1)
	{
		fprintf(stderr,"Erreur -> socket : %s\n", msg_err);
		exit(-1);
	}
	
	//connection du socket
	if(connect(sock, (struct sockaddr*) &cible, sizeof(cible))<0)
	{
		fprintf(stderr,"Erreur -> connect : %s\n", msg_err);
		exit(-1);
	}
	
	//affichage de mes infos de connexion
	getsockname(sock, (struct sockaddr*) &my_infos, &sizeof_my_infos);
	print("connecté !\n\n##########################\n\nMes infos de connection : ");
	aff_info(&my_infos);
	print("\n\n");
	print_man();
	print("\n\n");
	
	
	cont=1;
	while(cont!=0) //boucle principale
	{
		print("action -> ");
		fgets(buff, BUF_LEN-1, stdin); //récupération de la commande
		buff[strlen(buff)-1]='\0';
		//flush();
		switch(buff[0])
		{
			case 'q' : //fermeture du programme
				cont=0;
				break;
			case 'h' :
				print_man(); //affichage de l'aide
				break;
			case 'r' :
				reading(sock); //reception de données
				break;
			case 'w' :
				writing(sock, buff); //envoi du message suivant 'w '
				break;
			default :
				print("commande incorrecte :"); //Affichage du man si erreur
				print_man();
				break;
		}
	}
	print("Arrêt du client ...\n");
	
	return 0;
}