quinn-os/socket.h
2021-12-23 21:41:16 +10:00

54 lines
1.7 KiB
C

#ifndef __SOCKET_H
#define __SOCKET_H
#include "ether.h"
#include "tcp.h"
#include "pvec.h"
struct socket_t {
struct ether_t *ether;
unsigned char status;
unsigned int addr;
unsigned int port_dest;
unsigned int port_recv;
unsigned int bytes_available;
unsigned int bytes_read;
unsigned int offset;
unsigned char socket_type;
unsigned char send_payload;
struct tcp_socket_t tcp_sock;
struct ptr_vector out_packets;
struct ptr_vector packets;
int ref;
unsigned int serial;
union curr_packet {
struct tcp_data_t *tcp;
struct udp_data_t *udp;
} curr_packet;
void *data;
};
struct inet_addr {
unsigned int type;
unsigned int addr;
};
extern int socket_bind(unsigned int serial, unsigned int dest_ip, unsigned short dest_port, unsigned short src_port);
extern int socket_read_from(struct socket_t *sock, char *buffer, int len, unsigned int addr);
extern void socket_doclose(struct socket_t *sock);
extern int socket_listen(unsigned int serial, unsigned int listenip, unsigned short port);
extern unsigned int socket_accept(unsigned int serial, struct inet_addr *client_addr);
extern struct socket_t *socket_find(unsigned short dport, unsigned short sport, unsigned int src_ip, unsigned int seq);
extern void socket_close(unsigned int serial);
extern unsigned int socket_open(unsigned char type);
extern int socket_write(unsigned int serial, unsigned char* payload, unsigned int len);
extern int socket_connect(unsigned int serial, unsigned int dest_ip, unsigned short dest_port);
extern int socket_read(unsigned int serial, char *buffer, int len);
extern void init_sockets();
extern int socket_recv_from(unsigned int serial, char *buffer, int len, unsigned int *addr);
extern int socket_status(unsigned int serial);
#endif