projects
/
swifty.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
raw: Add socket_manager.c symlink.
[swifty.git]
/
src
/
raw
/
swift_raw.c
diff --git
a/src/raw/swift_raw.c
b/src/raw/swift_raw.c
index
4f26551
..
27506ac
100644
(file)
--- a/
src/raw/swift_raw.c
+++ b/
src/raw/swift_raw.c
@@
-19,12
+19,15
@@
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
+#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <unistd.h>
#include <errno.h>
-#include "include/swift_types.h"
-#include "include/swift_raw.h"
-#include "include/swift_list.h"
+#include "swift_types.h"
+#include "swift_raw.h"
+#include "socket_manager.h"
+#include "debug.h"
+#include "util.h"
/*
* Create a new socket of type TYPE in domain DOMAIN, using
/*
* Create a new socket of type TYPE in domain DOMAIN, using
@@
-36,7
+39,7
@@
int sw_socket(int __domain, int __type, int __protocol)
{
int s;
int sw_socket(int __domain, int __type, int __protocol)
{
int s;
-
struct sock_list *list
;
+
int rc
;
if (__domain != PF_INET || __type != SOCK_DGRAM || __protocol != IPPROTO_SWIFT) {
errno = EINVAL;
if (__domain != PF_INET || __type != SOCK_DGRAM || __protocol != IPPROTO_SWIFT) {
errno = EINVAL;
@@
-48,14
+51,14
@@
int sw_socket(int __domain, int __type, int __protocol)
goto sock_err;
}
goto sock_err;
}
-
list = list_add_socket
(s);
- if (
list == NULL
) {
+
rc = sm_add
(s);
+ if (
rc < 0
) {
errno = ENOMEM;
goto list_add_err;
}
/* Socket is not bound. */
errno = ENOMEM;
goto list_add_err;
}
/* Socket is not bound. */
-
list->bind_state = STATE_NOTBOUND
;
+
sm_mark_unbound(s)
;
return s;
return s;
@@
-72,34
+75,35
@@
sock_err:
*/
int sw_bind(int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
{
*/
int sw_bind(int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
{
- struct sock_list *list;
int rc;
int rc;
- rc =
list_socket
_is_bound(__fd);
+ rc =
sm
_is_bound(__fd);
if (rc == 1) {
errno = EINVAL;
goto socket_bound_err;
}
/* Check whether address is already in use. */
if (rc == 1) {
errno = EINVAL;
goto socket_bound_err;
}
/* Check whether address is already in use. */
-
list = list_elem_from_addres
s(__addr);
- if (
list != NULL
) {
+
rc = sm_address_exist
s(__addr);
+ if (
rc == 1
) {
errno = EADDRINUSE;
errno = EADDRINUSE;
- goto
list_elem
_err;
+ goto
address
_err;
}
/* Update __fd entry in socket management list. */
}
/* Update __fd entry in socket management list. */
-
list = list_update_socket
_address(__fd, __addr);
- if (
list == NULL
) {
+
rc = sm_update
_address(__fd, __addr);
+ if (
rc < 0
) {
errno = EBADF;
errno = EBADF;
- goto
list_
update_err;
+ goto update_err;
}
}
+ sm_mark_bound(__fd);
+
return 0;
return 0;
+update_err:
+address_err:
socket_bound_err:
socket_bound_err:
-list_update_err:
-list_elem_err:
return -1;
}
return -1;
}
@@
-107,21
+111,21
@@
list_elem_err:
int sw_getsockname(int __fd, __SOCKADDR_ARG __addr,
socklen_t *__restrict __len)
{
int sw_getsockname(int __fd, __SOCKADDR_ARG __addr,
socklen_t *__restrict __len)
{
- struct sock
_list *list
;
+ struct sock
addr *addr
;
/* Find socket in management structure. */
/* Find socket in management structure. */
-
list = list_elem_from_socket
(__fd);
- if (
list
== NULL) {
- errno = E
BADF
;
- goto
list_elem
_err;
+
addr = sm_get_address
(__fd);
+ if (
addr
== NULL) {
+ errno = E
INVAL
;
+ goto
address
_err;
}
}
- memcpy(__addr, &
list->addr, sizeof(list->
addr));
- *__len = sizeof(
list->
addr);
+ memcpy(__addr, &
addr, sizeof(
addr));
+ *__len = sizeof(addr);
return 0;
return 0;
-
list_elem
_err:
+
address
_err:
return -1;
}
return -1;
}
@@
-137,25
+141,24
@@
ssize_t sw_sendto(int __fd, __const void *__buf, size_t __n,
socklen_t __addr_len)
{
ssize_t bytes_sent;
socklen_t __addr_len)
{
ssize_t bytes_sent;
- struct sock_list *list;
struct iovec __iov[1];
struct msghdr __msgh;
struct sockaddr_sw *__sw_addr = (struct sockaddr_sw *) __addr;
struct iovec __iov[1];
struct msghdr __msgh;
struct sockaddr_sw *__sw_addr = (struct sockaddr_sw *) __addr;
+ int rc;
- printf("=== ADDR: %s ===", ntohl(__sw_addr->sin_addr.s_addr));
- list = list_elem_from_socket(__fd);
- if (list == NULL) {
- errno = EBADF;
+ rc = sm_is_bound(__fd);
+ if (rc < 0) {
+ errno = EAFNOSUPPORT;
goto sock_err;
}
goto sock_err;
}
+ {
+ char str[INET_ADDRSTRLEN];
- if (list->bind_state == STATE_NOTBOUND) {
- errno = EDESTADDRREQ;
- goto sock_err;
+ 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;
__iov[0].iov_len = __n;
/* Specify the components of the message in an "iovec". */
__iov[0].iov_base = (void *) __buf;
__iov[0].iov_len = __n;
@@
-188,10
+191,23
@@
ssize_t sw_recvfrom(int __fd, void *__restrict __buf, size_t __n,
socklen_t *__restrict __addr_len)
{
ssize_t bytes_recv;
socklen_t *__restrict __addr_len)
{
ssize_t bytes_recv;
+ struct iovec __iov[1];
+ struct msghdr __msgh;
+ struct sockaddr_sw *__sw_addr = (struct sockaddr_sw *) __addr;
+ int rc;
+
+ rc = sm_is_bound(__fd);
+ if (rc < 0) {
+ errno = EAFNOSUPPORT;
+ goto sock_err;
+ }
/* TODO */
/* TODO */
- return bytes_recv;
+ return recvmsg(__fd, &__msgh, 0);
+
+sock_err:
+ return -1;
}
/*
}
/*
@@
-206,6
+222,8
@@
ssize_t sw_sendmsg(int __fd, __const struct msghdr *__message,
{
ssize_t bytes_sent;
{
ssize_t bytes_sent;
+ /* TODO */
+
return sendmsg(__fd, __message, __flags);
}
return sendmsg(__fd, __message, __flags);
}
@@
-222,7
+240,7
@@
ssize_t sw_recvmsg(int __fd, struct msghdr *__message, int __flags)
/* TODO */
/* TODO */
- return
bytes_recv
;
+ return
recvmsg(__fd, __message, __flags)
;
}
/*
}
/*
@@
-259,15
+277,15
@@
int sw_close(int __fd)
int rc;
/* Remove socket from socket management structure. */
int rc;
/* Remove socket from socket management structure. */
- rc =
list_remove_socket
(__fd);
+ rc =
sm_del
(__fd);
if (rc < 0) {
errno = EBADF;
if (rc < 0) {
errno = EBADF;
- goto
list_unlink
_err;
+ goto
del
_err;
}
/* Call classical interface of close(2). */
return close(__fd);
}
/* Call classical interface of close(2). */
return close(__fd);
-
list_unlink
_err:
+
del
_err:
return -1;
}
return -1;
}