#include "pipe.hpp" #include "sys/sysproto.hpp" #include "utils/Logs.hpp" #include #include #include orbis::SysResult orbis::sys_socket(Thread *thread, sint domain, sint type, sint protocol) { ORBIS_LOG_TODO(__FUNCTION__, domain, type, protocol); if (auto socket = thread->tproc->ops->socket) { Ref file; auto result = socket(thread, nullptr, domain, type, protocol, &file); if (result.isError()) { return result; } auto fd = thread->tproc->fileDescriptors.insert(file); ORBIS_LOG_WARNING("Socket opened", fd); thread->retval[0] = fd; return {}; } return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_bind(Thread *thread, sint s, caddr_t name, sint namelen) { ORBIS_LOG_ERROR(__FUNCTION__, s, name, namelen); return {}; } orbis::SysResult orbis::sys_listen(Thread *thread, sint s, sint backlog) { ORBIS_LOG_ERROR(__FUNCTION__, s, backlog); return {}; } orbis::SysResult orbis::sys_accept(Thread *thread, sint s, ptr from, ptr fromlenaddr) { ORBIS_LOG_ERROR(__FUNCTION__, s, from, fromlenaddr); std::this_thread::sleep_for(std::chrono::days(1)); return SysResult::notAnError(ErrorCode::WOULDBLOCK); } orbis::SysResult orbis::sys_connect(Thread *thread, sint s, caddr_t name, sint namelen) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_socketpair(Thread *thread, sint domain, sint type, sint protocol, ptr rsv) { ORBIS_LOG_ERROR(__FUNCTION__, domain, type, protocol, rsv); auto pipe = createPipe(); auto a = thread->tproc->fileDescriptors.insert(pipe); auto b = thread->tproc->fileDescriptors.insert(pipe); if (auto errc = uwrite(rsv, a); errc != ErrorCode{}) { return errc; } return uwrite(rsv + 1, b); } orbis::SysResult orbis::sys_sendto(Thread *thread, sint s, caddr_t buf, size_t len, sint flags, caddr_t to, sint tolen) { return {}; } orbis::SysResult orbis::sys_sendmsg(Thread *thread, sint s, ptr msg, sint flags) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_recvfrom(Thread *thread, sint s, caddr_t buf, size_t len, sint flags, ptr from, ptr fromlenaddr) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_recvmsg(Thread *thread, sint s, ptr msg, sint flags) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_shutdown(Thread *thread, sint s, sint how) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_setsockopt(Thread *thread, sint s, sint level, sint name, caddr_t val, sint valsize) { ORBIS_LOG_TODO(__FUNCTION__, s, level, name, val, valsize); return {}; } orbis::SysResult orbis::sys_getsockopt(Thread *thread, sint s, sint level, sint name, caddr_t val, ptr avalsize) { ORBIS_LOG_TODO(__FUNCTION__, s, level, name, val, avalsize); return {}; } orbis::SysResult orbis::sys_getsockname(Thread *thread, sint fdes, ptr asa, ptr alen) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_getpeername(Thread *thread, sint fdes, ptr asa, ptr alen) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_sendfile(Thread *thread, sint fd, sint s, off_t offset, size_t nbytes, ptr hdtr, ptr sbytes, sint flags) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_sctp_peeloff(Thread *thread, sint sd, uint32_t name) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_sctp_generic_sendmsg(Thread *thread, sint sd, caddr_t msg, sint mlen, caddr_t to, __socklen_t tolen, ptr sinfo, sint flags) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_sctp_generic_sendmsg_iov( Thread *thread, sint sd, ptr iov, sint iovlen, caddr_t to, __socklen_t tolen, ptr sinfo, sint flags) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_sctp_generic_recvmsg(Thread *thread, sint sd, ptr iov, sint iovlen, caddr_t from, __socklen_t fromlen, ptr sinfo, sint flags) { return ErrorCode::NOSYS; }