Fix transformation between string address to network address
authorBogdan Drutu <bogdandrutu@gmail.com>
Sat, 4 Jun 2011 09:38:06 +0000 (12:38 +0300)
committerBogdan Drutu <bogdandrutu@gmail.com>
Sat, 4 Jun 2011 09:38:06 +0000 (12:38 +0300)
src/raw/swift_raw.c
src/raw/test/test_sw_sendto.c

index 12f8fb5..a8d8412 100644 (file)
@@ -147,8 +147,11 @@ ssize_t sw_sendto(int __fd, __const void *__buf, size_t __n,
                errno = EAFNOSUPPORT;
                goto sock_err;
        }
-       printf("=== ADDR: %s ===\n", ntohl(__sw_addr->sin_addr.s_addr));
+
+       char str[INET_ADDRSTRLEN];
+
+    inet_ntop(AF_INET, &(__sw_addr->sin_addr), str, INET_ADDRSTRLEN);  
+       printf("=== ADDR: %s ===\n", str);
 
        /* Specify the components of the message in an "iovec".   */
        __iov[0].iov_base = (void *) __buf;
@@ -182,10 +185,23 @@ ssize_t sw_recvfrom(int __fd, void *__restrict __buf, size_t __n,
                         socklen_t *__restrict __addr_len)
 {
        ssize_t bytes_recv;
+       struct sock_list *list;
+       struct iovec __iov[1];
+       struct msghdr __msgh;
+       struct sockaddr_sw *__sw_addr = (struct sockaddr_sw *) __addr;
 
+       list = list_elem_from_socket(__fd);
+       if (list != NULL && list->bind_state == STATE_NOTBOUND) {
+               errno = EAFNOSUPPORT;
+               goto sock_err;
+       }
        /* TODO */
 
-       return bytes_recv;
+       return recvmsg(__fd, &__msgh, 0);
+       
+sock_err:
+       return -1;
 }
 
 /*
@@ -200,6 +216,8 @@ ssize_t sw_sendmsg(int __fd, __const struct msghdr *__message,
 {
        ssize_t bytes_sent;
 
+       /* TODO */
+       
        return sendmsg(__fd, __message, __flags);
 }
 
@@ -216,7 +234,7 @@ ssize_t sw_recvmsg(int __fd, struct msghdr *__message, int __flags)
 
        /* TODO */
 
-       return bytes_recv;
+       return recvmsg(__fd, __message, __flags);
 }
 
 /*
index ae3284a..be50640 100644 (file)
@@ -106,14 +106,17 @@ static void sendto_ok(void)
        DIE(rc < 0, "sw_bind");
 
        bytes_sent = sw_sendto(sockfd, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
+       
+       perror("sw_sendto");
        test( bytes_sent >= 0 );
+
 }
 
 static void fill_sockaddr_sw(struct sockaddr_sw *local_addr, struct sockaddr_sw *remote_addr, char * local_address, char * hash, char * dest_address) 
 {
-       local_addr->sin_addr.s_addr = htonl((int)local_address);
+       inet_pton(PF_INET, local_address, &(local_addr->sin_addr));
        memcpy(&local_addr->sw_hash, hash, sizeof(struct sw_hash));
 
-       remote_addr->sin_addr.s_addr = htonl((int)dest_address);
+       inet_pton(PF_INET, dest_address, &(remote_addr->sin_addr));
        memcpy(&remote_addr->sw_hash, hash, sizeof(struct sw_hash));
 }