/* spb - a very simple toy spartan client */ #include //printf #include //strlen #include //socket #include //inet_addr #include #include #include "yuarel.h" char req[1000]; char reply[0x10000]; int process(int sock,struct sockaddr* server){ //Connect to remote server if (connect(sock , server , sizeof(struct sockaddr_in)) < 0) { perror("connect failed. Error"); return 1; } //Send some data if( send(sock , req , strlen(req) , 0) < 0) { puts("Send failed"); return 1; } //Receive a reply from the server while( recv(sock , reply , sizeof(reply) , 0) > 0){ // puts("["); puts(reply); //puts("]"); } return 0; } long hostname_to_ip(char * hostname){ struct hostent *he; struct in_addr **addr_list; if ( (he = gethostbyname( hostname ) ) == NULL) { // get the host info herror("gethostbyname"); return 0; } addr_list = (struct in_addr **) he->h_addr_list; return *(long*)addr_list[0]; } int main(int argc , char *argv[]){ int sock; struct sockaddr_in server; struct yuarel url; if(-1==yuarel_parse(&url,argv[1])){ fprintf(stderr,"Could not parse url\n"); return 1; } /* printf("Struct values:\n"); printf("\tscheme:\t\t%s\n", url.scheme); printf("\thost:\t\t%s\n", url.host); printf("\tport:\t\t%d\n", url.port); printf("\tpath:\t\t%s\n", url.path); printf("\tquery:\t\t%s\n", url.query); printf("\tfragment:\t%s\n", url.fragment); */ sprintf(req,"%s %s 0\r\n",url.host, url.path&&*url.path?url.path:"/"); long q = hostname_to_ip(url.host); if(!q) return 1; //Create socket sock = socket(AF_INET , SOCK_STREAM , 0); if (sock == -1){ printf("Could not create socket"); } //struct in_addr *address; // struct hostent *host_info; // host_info = gethostbyname(argv[1]); server.sin_addr.s_addr = q;//inet_addr(argv[1]); server.sin_family = AF_INET; server.sin_port = htons(url.port?url.port:300); // printf("addr: %x",server.sin_addr.s_addr); process(sock,(struct sockaddr*)&server); close(sock); return 0; }