Beispiel #1
0
int
main(int argc, char *argv[])
{
    int sfd, j;
    size_t len;
    ssize_t numRead;
    char buf[BUF_SIZE];

    if (argc < 2 || strcmp(argv[1], "--help") == 0)
        usageErr("%s host msg...\n", argv[0]);

    /* Construct server address from first command-line argument */

    sfd = inetConnect(argv[1], SERVICE, SOCK_DGRAM);
    if (sfd == -1)
        fatal("Could not connect to server socket");

    /* Send remaining command-line arguments to server as separate datagrams */

    for (j = 2; j < argc; j++) {
        len = strlen(argv[j]);
        if (write(sfd, argv[j], len) != len)
            fatal("partial/failed write");

        numRead = read(sfd, buf, BUF_SIZE);
        if (numRead == -1)
            errExit("read");

        printf("[%ld bytes] %.*s\n", (long) numRead, (int) numRead, buf);
    }

    exit(EXIT_SUCCESS);
}
Beispiel #2
0
int
main(int argc, char *argv[])
{
    char *reqLenStr;                    /* Requested length of sequence */
    char seqNumStr[INT_LEN];            /* Start of granted sequence */
    int cfd;
    ssize_t numRead;

    if (argc < 2 || strcmp(argv[1], "--help") == 0)
        usageErr("%s server-host [sequence-len]\n", argv[0]);

    cfd = inetConnect(argv[1], PORT_NUM_STR, SOCK_STREAM);
    if (cfd == -1)
        fatal("inetConnect() failed");

    reqLenStr = (argc > 2) ? argv[2] : "1";
    if (write(cfd, reqLenStr, strlen(reqLenStr)) !=  strlen(reqLenStr))
        fatal("Partial/failed write (reqLenStr)");
    if (write(cfd, "\n", 1) != 1)
        fatal("Partial/failed write (newline)");

    numRead = readLine(cfd, seqNumStr, INT_LEN);
    if (numRead == -1)
        errExit("readLine");
    if (numRead == 0)
        fatal("Unexpected EOF from server");

    printf("Sequence number: %s", seqNumStr);   /* Includes '\n' */

    exit(EXIT_SUCCESS);                         /* Closes 'cfd' */
}
Beispiel #3
0
/*
 * Returns a file descriptor for a socket connected to the monitor
 * server.
 * Return -1 on error.
 */
int bfdmonClient_init(const char *monitor_server)
{
    bfdmonClientDebug("bfdmon: Initializing\n");

    if (!subscriptionTree)
    {
        subscriptionTree = avl_create(bfdmonClient_SubscriptionCompare, NULL);
    }

    return inetConnect(monitor_server, DEFAULT_MONITOR_PORT);
}
Beispiel #4
0
int
main(int argc, char *argv[])
{
    int listenFd, acceptFd, connFd;
    socklen_t len;                      /* Size of socket address buffer */
    void *addr;                         /* Buffer for socket address */
    char addrStr[IS_ADDR_STR_LEN];

    if (argc != 2 || strcmp(argv[1], "--help") == 0)
        usageErr("%s service\n", argv[0]);

    /* Create listening socket, obtain size of address structure */

    listenFd = inetListen(argv[1], 5, &len);
    if (listenFd == -1)
        errExit("inetListen");

    connFd = inetConnect(NULL, argv[1], SOCK_STREAM);
    if (connFd == -1)
        errExit("inetConnect");

    acceptFd = accept(listenFd, NULL, NULL);
    if (acceptFd == -1)
        errExit("accept");

    addr = malloc(len);
    if (addr == NULL)
        errExit("malloc");

    if (getsockname(connFd, addr, &len) == -1)
        errExit("getsockname");
    printf("getsockname(connFd):   %s\n",
            inetAddressStr(addr, len, addrStr, IS_ADDR_STR_LEN));

    if (getsockname(acceptFd, addr, &len) == -1)
        errExit("getsockname");
    printf("getsockname(acceptFd): %s\n",
            inetAddressStr(addr, len, addrStr, IS_ADDR_STR_LEN));

    if (getpeername(connFd, addr, &len) == -1)
        errExit("getpeername");
    printf("getpeername(connFd):   %s\n",
            inetAddressStr(addr, len, addrStr, IS_ADDR_STR_LEN));

    if (getpeername(acceptFd, addr, &len) == -1)
        errExit("getpeername");
    printf("getpeername(acceptFd): %s\n",
            inetAddressStr(addr, len, addrStr, IS_ADDR_STR_LEN));

    sleep(30);                          /* Give us time to run netstat(8) */
    exit(EXIT_SUCCESS);
}
Beispiel #5
0
int
main(int argc, char *argv[])
{
  int sfd;
  ssize_t numRead;
  char buf[BUF_SIZE];

  if (argc != 2 || strcmp(argv[1], "--help") == 0)
    usageErr("%s host\n", argv[0]);

  sfd = inetConnect(argv[1], "echo", SOCK_STREAM);
  if (sfd == -1)
    errExit("inetConnect");

  switch (fork()) {
    case -1:
      errExit("fork");

    case 0:      /* Child: read server's response, echo on stdout */
      for (;;) {
        numRead = read(sfd, buf, BUF_SIZE);
        if (numRead <= 0)          /* Exit on EOF or error */
          break;
        printf("%.*s", (int) numRead, buf);
      }
      exit(EXIT_SUCCESS);

    default:      /* Parent: write contents of stdin to socket */
      for (;;) {
        numRead = read(STDIN_FILENO, buf, BUF_SIZE);
        if (numRead <= 0)          /* Exit loop on EOF or error */
          break;
        if (write(sfd, buf, numRead) != numRead)
          fatal("write() failed");
      }

      /* Close writing channel, so server sees EOF */

      if (shutdown(sfd, SHUT_WR) == -1)
        errExit("shutdown");

      exit(EXIT_SUCCESS);
  }
}
Beispiel #6
0
int transfer(char *host, char *port) {
    int sfd; // server socket
    fileop_t *f; // contains all operations for a file

    sfd = inetConnect(host, port, SOCK_STREAM);
    if (sfd == -1) {
        errnoMsg(LOG_ERR, "Unable to connect to the server.");
        return -1;
    }

    // initiate sync (sync-id, resource, number of files)
    errMsg(LOG_INFO, "Number of files: %d", HASH_COUNT(files));
    switch (initiateSync(sfd, HASH_COUNT(files))) {
        case -1: // error
            return -1;
        case -2: // there's nothing to synchronize
            return 0;
        default:
            break;
    }

    // iterate over files in correct order
    HASH_SORT(files, sortByOrder);
    for (f = files; f != NULL; f = (fileop_t*) (f->hh.next)) {
        if (transferFile(sfd, f) == -1) {
            errMsg(LOG_ERR, "Transfer of file %s has failed.",
                    f->relpath);
            return -1;
        }
    }

    // wait for ACK
    SyncFinish *conf;
    conf = (SyncFinish *) recvMessage(sfd, SyncFinishType, NULL);
    if (conf == NULL) {
        errMsg(LOG_ERR, "Could not get transfer confirmation.");

        return -1;
    }
    return 0;
}
Beispiel #7
0
int main (int argc, char **argv)
{
	if (argc < 2 || strcmp(argv[1], "--help") == 0)
		usageErr("%s server-host [sequence-len]\n",argv[0]);

	int cfd = inetConnect(argv[1], PORT_NUM, SOCK_STREAM);
	if (cfd == -1)
		errExit("can't connect");

	
	/* send/recv msg */
	char recvbuf[INT_LEN];
	if (write(cfd, "123\n", 4) != 4)
		errExit("write fail");

	ssize_t numRead = read(cfd, recvbuf, INT_LEN-1);
	if (numRead == -1)
		errExit("readLine");
	if (numRead == 0)
		errExit("get eof from server");
	recvbuf[numRead]='\0';
	printf("get from serv:%s\n", recvbuf);
	return 0;
}
Beispiel #8
0
int main(int argc, char **argv)
{
   if(argc != 2)
   {
      fprintf(stderr, "usage: %s [url]\n", argv[0]);
      return 0;
   }

   typedef struct http_parser_url HP_URL;
   HP_URL *u = (HP_URL*)malloc(sizeof(HP_URL));
   char *url = argv[1], *host, *path, *query = NULL, *get_request;
   int sockfd;

   int result = http_parser_parse_url(url, strlen(url), 0, u); 
   if (result != 0) {
      fprintf(stderr, "url parse error : %d\n", result);
      free(u);
      return result;
   }

   if((u->field_set & (1 << UF_HOST)) != 0)
      host = strndup(url+u->field_data[UF_HOST].off,u->field_data[UF_HOST].len);

   if((u->field_set & (1 << UF_PATH)) != 0)
      path = strndup(url+u->field_data[UF_PATH].off,u->field_data[UF_PATH].len);
   else
      path = strdup("/");

   if((u->field_set & (1 << UF_QUERY)) != 0)
   {
      query = strndup(url+u->field_data[UF_QUERY].off,u->field_data[UF_QUERY].len);
      printf("query = %s\n", query);
   }

   printf("host  = %s\n", host);
   printf("path  = %s\n", path);

   if((sockfd = inetConnect(host, "80")) < 0)
   {
      fprintf(stderr, "error: connect()\n");
      free(query);
      free(host);
      free(path);
      return -1;
   }

   if(query)
   {
      get_request = calloc(1,snprintf(NULL, 0, "GET %s?%s HTTP/1.1\r\nUser-Agent: Chrome\r\nHost: %s\r\nAccept: */*\r\n\r\n", path, query, host)+1);
      sprintf(get_request, "GET %s?%s HTTP/1.1\r\nUser-Agent: Chrome\r\nHost: %s\r\nAccept: */*\r\n\r\n", path, query, host);
   } else {
      get_request = calloc(1,snprintf(NULL, 0, "GET %s HTTP/1.1\r\nUser-Agent: Chrome\r\nHost: %s\r\nAccept: */*\r\n\r\n", path, host)+1);
      sprintf(get_request, "GET %s HTTP/1.1\r\nUser-Agent: Chrome\r\nHost: %s\r\nAccept: */*\r\n\r\n", path, host);
   }

   printf("get_request:\n---------------\n%s---------------\n",get_request);

   send(sockfd, get_request, strlen(get_request), 0);

   // receive response
   //char *pageContentBuffer = (char*)malloc(4096);
   //recv(sockfd, pageContentBuffer, 4096, 0);

   /* this:
   do {
     i = recv(sock->sockfd, data, sz, 0);
     if (i <= 0 && (errno == EAGAIN))
     continue;
     n = i;
   } while (n == 0);
   */

   struct timeval tv;
   fd_set readfds;
   //tv.tv_sec = 2;
   tv.tv_sec = 10;
   tv.tv_usec = 0;
   FD_ZERO(&readfds);
   FD_SET(sockfd, &readfds);


   int i = 0, n=0;
   int amntRecvd = 0;
   int currentSize = 4096;
   int oldSize = currentSize;
   char *pageContentBuffer = (char*) malloc(currentSize);
   char *newBuffer;
   do {
      select(sockfd+1, &readfds, NULL, NULL, &tv);

      // if we don't have data to read, exit loop
      if(!FD_ISSET(sockfd, &readfds))
        break;
      amntRecvd = recv(sockfd, pageContentBuffer + i, 4096, 0);
      printf("recv() returned = %d\n",amntRecvd);
      //printf("got: %d bytes\n", amntRecvd);
      i += amntRecvd;
      //printf("pageContentBuffer[i-1] = 0x%02x\n",pageContentBuffer[i-1]);
      //if(pageContentBuffer[i-1] == '\n' && pageContentBuffer[i-2] == '\r')
      //   break;
      oldSize = currentSize; 
      currentSize += 4096; 
      newBuffer = malloc(currentSize); 
      memcpy(newBuffer,pageContentBuffer,oldSize); 
      free(pageContentBuffer); 
      pageContentBuffer = newBuffer;
      n = amntRecvd;
      tv.tv_sec = 1;
      tv.tv_usec = 100000;
   } while (n > 0);

   printf("response:\n---------------\n%s\n---------------\n",pageContentBuffer);

   close(sockfd);

   free(pageContentBuffer);
   free(get_request);
   free(host);
   free(path);
   free(query);
   free(u);
   return 0;
}
/* Functions. */
int main()
{
	inetConnect();
	return 0;
}