#include <debug.h>
#include "socket.h"
#include <process.h>
+#include <sys/mbuf.h>
int sys_socket(int domain, int type, int protocol)
{
return(ret_val);
}
-int sys_sendto(int sockfd, const void *buf, size_t len, int flags,
+int sys_sendto(int procfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen)
{
- return(-ENOSYS);
+ process_t *cproc;
+ int sockfd;
+ int ret_val;
+
+ cproc = process_get_current();
+ ret_val = -EFAULT;
+
+ if(cproc) {
+ sockfd = process_flookup(cproc, procfd);
+
+ if(sockfd < 0) {
+ ret_val = sockfd;
+ } else {
+#if 0
+ struct mbuf *m;
+
+ m = mbuf_alloc();
+
+ if(m) {
+ /* FIXME: implement sosend() function and call it from here */
+ ret_val = -ENOSYS;
+ } else {
+ ret_val = -ENOMEM;
+ }
+#endif
+ }
+ }
+
+ return(ret_val);
}
-int sys_recvfrom(int sockfd, void *buf, size_t len, int flags,
+int sys_recvfrom(int procfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen)
{
- return(-ENOSYS);
+ process_t *cproc;
+ int sockfd;
+ int ret_val;
+
+ cproc = process_get_current();
+ ret_val = -EFAULT;
+
+ if(cproc) {
+ sockfd = process_flookup(cproc, procfd);
+
+ if(sockfd < 0) {
+ ret_val = sockfd;
+ } else {
+ /* FIXME: Implement sorecv() function and call it from here */
+ ret_val = -ENOSYS;
+ }
+ }
+
+ return(ret_val);
}
-int sys_connect(int sockfd, const struct sockaddr *addr,
+int sys_connect(int procfd, const struct sockaddr *addr,
socklen_t addrlen)
{
- return(-ENOSYS);
+ process_t *cproc;
+ int sockfd;
+ int ret_val;
+
+ cproc = process_get_current();
+ ret_val = -EFAULT;
+
+ if(cproc) {
+ sockfd = process_flookup(cproc, procfd);
+
+ if(sockfd < 0) {
+ ret_val = sockfd;
+ } else {
+ /* FIXME: Implement soconnect() */
+ ret_val = -ENOSYS;
+ }
+ }
+
+ return(ret_val);
}
-int sys_listen(int sockfd, int backlog)
+int sys_listen(int procfd, int backlog)
{
- return(-ENOSYS);
+ process_t *cproc;
+ int sockfd;
+ int ret_val;
+
+ cproc = process_get_current();
+ ret_val = -EFAULT;
+
+ if(cproc) {
+ sockfd = process_flookup(cproc, procfd);
+
+ if(sockfd < 0) {
+ ret_val = sockfd;
+ } else {
+ /* FIXME: Implement solisten() */
+ ret_val = -ENOSYS;
+ }
+ }
+
+ return(ret_val);
}
-int sys_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
+int sys_accept(int procfd, struct sockaddr *addr, socklen_t *addrlen)
{
- return(-ENOSYS);
+ process_t *cproc;
+ int sockfd;
+ int ret_val;
+
+ cproc = process_get_current();
+ ret_val = -EFAULT;
+
+ if(cproc) {
+ sockfd = process_flookup(cproc, procfd);
+
+ if(sockfd < 0) {
+ ret_val = sockfd;
+ } else {
+ /* FIXME: Implement soaccept() */
+ ret_val = -ENOSYS;
+ }
+ }
+
+ return(ret_val);
}
int sys_setsockopt(int procfd, int level, int optname,