src/irc_proto.h
changeset 39 a4891d71aca9
child 45 71e65564afd2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/irc_proto.h	Thu Mar 12 18:48:42 2009 +0200
@@ -0,0 +1,72 @@
+#ifndef IRC_PROTO_H
+#define IRC_PROTO_H
+
+/**
+ * @file
+ *
+ * General IRC protocol things, such as prefix/nickmask/nickname parsing
+ */
+#include "error.h"
+#include <stddef.h>
+
+/**
+ * Maximum length of an IRC nickname including terminating NUL
+ */
+#define IRC_NICK_MAX 31
+
+/**
+ * Parsed nickmask
+ */
+struct irc_nm {
+    /** Nickname, not normalized */
+    const char *nickname;
+    
+    /** Username, including any ident-related prefix from the network */
+    const char *username;
+
+    /** Hostname, either reverse DNS hostname, literal IPv4 or literal IPv6 */
+    const char *hostname;
+};
+
+/**
+ * Parse a full nickmask from a prefix. This fails if the prefix is a server name.
+ *
+ * XXX: not implemented, and memory-management issues
+ */
+err_t irc_nm_parse (struct irc_nm *nm, char *prefix);
+
+/**
+ * Compare two nicknames for equality, with standard strcmp() semantics.
+ */
+int irc_cmp_nick (const char *nick1, const char *nick2);
+
+/**
+ * Compare up to the first n chars of the two nickname strings for equality, with standard strcmp() semantics.
+ */
+int irc_ncmp_nick (const char *nick1, const char *nick2, size_t n);
+
+/**
+ * Parse the nickname portion of a prefix, storing it in the given buffer of IRC_NICK_MAX bytes.
+ */
+err_t irc_prefix_parse_nick (const char *prefix, char nick[IRC_NICK_MAX]);
+
+/**
+ * Compare the nickname in the given prefix and with the given nickname for equality.
+ *
+ * @return -err for invalid prefix, 0 for match, >0 for non-match.
+ */
+int irc_prefix_cmp_nick (const char *prefix, const char *nick);
+
+/**
+ * @group IRC command numerics
+ * @{
+ */
+
+/**
+ * 001 <nick> :Welcome to the Internet Relay Network <nick>!<user>@<host>
+ */
+#define IRC_RPL_WELCOME         "001"
+
+// @}
+
+#endif