Пример #1
0
int main(int argc, char **argv) {

	int usemenu = parsecmdline(argc, argv);//./server port -i -n -l

	short unsigned int key[3];
	key[0] = getpid();
	key[1] = time(NULL);
	seed48(key);
			
    serverdata_type *s = readinput(inputfile, sdata);//read server.dat or saved-data to initiate dU* and p*

	pthread_t thread;
	if (usemenu) {int pthread_id = pthread_create(&thread, NULL, runmenu, (void *)s);
	//printf("pthread_id=%d\n",pthread_id);
	}
	int socket = bindsocket(port);
	//printf("socket=%d\n",socket);

	if (!usemenu) printf("No menu will be available\n");
	initparameters(s);
	//printf("key = %d\n", s->key);
// main loop - we read requests and complete transactions
	while (FOREVER_EVER_EVER) {
		//printf("entering loop\n");
		processrequest(socket, s);
		//printf("finishing loop\n");
	}

	return 0;

}
Пример #2
0
int Socket::connect(struct sockaddr *sa, socklen_t salen)
{
    if (bindsocket() == -1)
        return -1;
    if (!utp_sock) {
        utp_sock = UTP_Create(_SendToProc, this, sa, salen);
        UTP_SetCallbacks(utp_sock, &utp_funcs, this);
    }
    UTP_Connect(utp_sock);
}
Пример #3
0
int Socket::listen()
{
    if (bindsocket() == -1)
        return -1;
}
void main(){

	int sockfd,newfd;
	struct sockaddr_in myaddress;
	struct sockaddr_in clientaddress;
	int sin_size;

  sockfd = createsocket(PF_INET,SOCK_DGRAM,0);


	create(&myaddress,MYPORT,IP);

  bindsocket(sockfd,&myaddress);


  //create tld data
  struct resource records[20];
  int recordslen = 0;
  records[recordslen++] = createresource("dns.auth.com","127.0.0.20",Q_A,3000);

  records[recordslen++] = createresource("athena.com","dns.auth.com",Q_NS,3000);
  records[recordslen++] = createresource("www.athena.com","dns.auth.com",Q_NS,3000);
  records[recordslen++] = createresource("mail.athena.com","dns.auth.com",Q_NS,3000);

  records[recordslen++] = createresource("facebook.com","dns.auth.com",Q_NS,3000);
  records[recordslen++] = createresource("www.facebook.com","dns.auth.com",Q_NS,3000);
  records[recordslen++] = createresource("mail.facebook.com","dns.auth.com",Q_NS,3000);

  records[recordslen++] = createresource("google.com","dns.auth.com",Q_NS,3600);
  records[recordslen++] = createresource("www.google.com","dns.auth.com",Q_NS,3600);
  records[recordslen++] = createresource("mail.google.com","dns.auth.com",Q_NS,3600);

  records[recordslen++] = createresource("amazon.com","dns.auth.com",Q_NS,3000);
  records[recordslen++] = createresource("www.amazon.com","dns.auth.com",Q_NS,3000);
  records[recordslen++] = createresource("mail.amazon.com","dns.auth.com",Q_NS,3000);




  while(1){

    printf("\n\nWaiting for query.\n\n");

        struct msg m;
        recievequery(sockfd,&m,&clientaddress);

        if(m.msg_type==MSG_QUERY){
          printf("Query for %s recieved.\n", m.queries[0].name);

          struct resource found[4];
          int k = search(records,recordslen,found,m.queries[0].name);

          if(k>0){

            if(found[0].type == Q_NS){
              //find dns
              printf("NS Record found.\n");
              struct resource dns[4];
              int l = search(records,recordslen,dns,found[0].value);

              if(k>0){

                m.answers[0] = found[0];
                m.answers[1] = dns[0];
                sendquery(sockfd,m,MSG_REPLY,0,2,clientaddress);


              }else{
                //no A records found for dns. Shouldn't happen normally.
                printf("But No A Records found.\n");
                sendquery(sockfd,m,MSG_ERROR,0,0,clientaddress);

              }


            }else{

              //possibly the A records
              printf("A Records found.\n");
              int i;
              for (i = 0; i < k; i++) {
                m.answers[i] = found[i];
              }
              sendquery(sockfd,m,MSG_REPLY,0,0,clientaddress);

            }


          }else{
            //no results
            printf("No Records found.\n");
            sendquery(sockfd,m,MSG_ERROR,0,0,clientaddress);
          }


        }else{
          //error.
          printf("Not a query.\n");
          sendquery(sockfd,m,MSG_ERROR,0,0,clientaddress);
        }
    }

}