All pastes #491560 Raw Edit

Someone

public c v1 · immutable
·published 2007-05-16 18:56 UTC
rendered paste body
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>void error(char *msg){    perror(msg);    exit(0);}int main(int argc, char *argv[]){    int sockfd, portno, n;    struct sockaddr_in serv_addr;    struct hostent *server;    char buffer[2560];    char header_buff[2560];    if (argc < 3) {       fprintf(stderr,"usage %s url port\n", argv[0]);       exit(0);    }char  *fname, *hostname, *getstr ;int i, hnp;i=hnp=0;for (i=0; i<strlen(argv[1]); i++){        if ( ((*(argv[1]+i))=='/') ) {                        hnp=i;                        break;        }}hostname=malloc(hnp);getstr=malloc(strlen(argv[1])-hnp);strncpy(hostname,argv[1],hnp);strncpy(getstr,argv[1]+hnp,strlen(argv[1])-hnp);printf("%s\n",hostname);printf("%s\n",getstr);for (i=(strlen(argv[1])-1);i>0;i--) {        if ( ((*(argv[1]+i))=='/') ) {                        hnp=i;                        break;        }}fname=malloc(strlen(argv[1])-hnp);strncpy(fname,argv[1]+hnp+1,strlen(argv[1])-hnp);printf("%s\n",fname);    portno = atoi(argv[2]);    sockfd = socket(AF_INET, SOCK_STREAM, 0);    if (sockfd < 0)        error("ERROR opening socket");    server = gethostbyname(hostname);    if (server == NULL) {        fprintf(stderr,"ERROR, no such host\n");        exit(0);    }    bzero((char *) &serv_addr, sizeof(serv_addr));    serv_addr.sin_family = AF_INET;    bcopy((char *)server->h_addr,         (char *)&serv_addr.sin_addr.s_addr,         server->h_length);    serv_addr.sin_port = htons(portno);    if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)        error("ERROR connecting");    bzero(buffer,sizeof(buffer));    strcpy(buffer,"GET ");     strcpy(buffer+strlen(buffer),getstr);    strcpy(buffer+strlen(buffer)," HTTP/1.0\r\n\r\n");        printf("%s",buffer);    n = write(sockfd,buffer,strlen(buffer));        FILE *file;        file = fopen(fname, "wb");    if (n < 0)         error("ERROR writing to socket");    bzero(buffer,sizeof(buffer));    bzero(header_buff,sizeof(header_buff));    int nb,o,hp,c;    o=nb=hp=c=0;/*locating header*/while ( (hp==0) &&  (nb=read(sockfd,buffer+o,sizeof(buffer)-o)) ) {        printf("%d bytes recieved \n",nb);        o=o+nb;        for (c=0; c<=o-3; c++)  {                if ( ((*(buffer+c))=='\r') && ((*(buffer+c+1))=='\n') &&  ((*(buffer+c+2))=='\r') && ((*(buffer+c+3))=='\n')  ) {                        //printf("header\n%sbuffer\n%d bytes header\n",buffer,c);                        hp=c;                        break;                }        }        printf("%d bytes of header and data \n",o);}/*copy header into header buff*/strncpy(header_buff,buffer,hp); printf("begin header\n%s\nend header\n",header_buff);/*write remind afrer header an \r\n\r\n as data */fwrite((buffer+hp+4),1,(o-hp-4),file);bzero(buffer,sizeof(buffer));    while ( (nb=read(sockfd,buffer,sizeof(buffer))) ) {        printf("%d bytes of data recieved \n",nb);        //printf("%s",buffer);        fwrite(buffer,1,nb,file);        bzero(buffer,sizeof(buffer));    }        fclose(file);        return 0;}