summaryrefslogtreecommitdiff
path: root/network.h
diff options
context:
space:
mode:
Diffstat (limited to 'network.h')
-rw-r--r--network.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/network.h b/network.h
index 88383bd..136de3d 100644
--- a/network.h
+++ b/network.h
@@ -31,6 +31,9 @@
#include <netinet/in.h>
#include <pthread.h>
#include <limits.h>
+#include <errno.h>
+
+#include <stdio.h>
#include "types.h"
#include "table.h"
@@ -87,6 +90,8 @@ extern struct table user_list;
extern pthread_mutex_t send_lock;
+extern int server_fd;
+
extern int client_fd;
extern int client_listen_fd;
extern struct string client_nick;
@@ -112,6 +117,32 @@ extern ssize_t SENDCLIENT(struct string msg);
#define SENDCLIENT(x) write(client_fd, x.data, x.len)
#endif
+#if LOGALL
+extern ssize_t SEND(struct string msg);
+#else
+#define SEND(x) write(server_fd, x.data, x.len)
+#endif
+
+inline size_t RECV(char *buf, size_t buflen, char *timeout) {
+ ssize_t len;
+ do {
+ len = recv(server_fd, buf, buflen, 0);
+ } while (len == -1 && errno == EINTR);
+
+ if (len == -1)
+ fprintf(stderr, "errno: %d\n", errno);
+
+ if (len == -1)
+ *timeout = (errno == EAGAIN || errno == EWOULDBLOCK);
+ else
+ *timeout = 0;
+
+ if (len < 0)
+ return 0;
+ else
+ return (size_t)len;
+}
+
extern int privmsg(struct string source, struct string target, size_t num_message_parts, struct string message[num_message_parts]);
extern int add_local_client(struct string uid, struct string nick_arg, struct string vhost_arg, struct string ident_arg, struct string realname_arg, time_t timestamp, char fake_cert);
extern int remove_user(struct string uid, struct string reason);