📄 lib.h
字号:
void xmlnode_free(xmlnode node);/* Locates a child tag by name and returns it */xmlnode xmlnode_get_tag(xmlnode parent, const char* name);char* xmlnode_get_tag_data(xmlnode parent, const char* name);/* Attribute accessors */void xmlnode_put_attrib(xmlnode owner, const char* name, const char* value);char* xmlnode_get_attrib(xmlnode owner, const char* name);void xmlnode_put_expat_attribs(xmlnode owner, const char** atts);/* Bastard am I, but these are fun for internal use ;-) */void xmlnode_put_vattrib(xmlnode owner, const char* name, void *value);void* xmlnode_get_vattrib(xmlnode owner, const char* name);/* Node traversal routines */xmlnode xmlnode_get_firstattrib(xmlnode parent);xmlnode xmlnode_get_firstchild(xmlnode parent);xmlnode xmlnode_get_lastchild(xmlnode parent);xmlnode xmlnode_get_nextsibling(xmlnode sibling);xmlnode xmlnode_get_prevsibling(xmlnode sibling);xmlnode xmlnode_get_parent(xmlnode node);/* Node information routines */char* xmlnode_get_name(xmlnode node);char* xmlnode_get_data(xmlnode node);int xmlnode_get_datasz(xmlnode node);int xmlnode_get_type(xmlnode node);int xmlnode_has_children(xmlnode node);int xmlnode_has_attribs(xmlnode node);/* Node-to-string translation */char* xmlnode2str(xmlnode node);/* Node-to-terminated-string translation -- useful for interfacing w/ scripting langs */char* xmlnode2tstr(xmlnode node);int xmlnode_cmp(xmlnode a, xmlnode b); /* compares a and b for equality */int xmlnode2file(char *file, xmlnode node); /* writes node to file *//* Expat callbacks */void expat_startElement(void* userdata, const char* name, const char** atts);void expat_endElement(void* userdata, const char* name);void expat_charData(void* userdata, const char* s, int len);/*********************** * XSTREAM Section ***********************/#define XSTREAM_MAXNODE 1000000#define XSTREAM_MAXDEPTH 100#define XSTREAM_ROOT 0 /* root element */#define XSTREAM_NODE 1 /* normal node */#define XSTREAM_CLOSE 2 /* closed </stream:stream> */#define XSTREAM_ERR 4 /* parser error */typedef void (*xstream_onNode)(int type, xmlnode x, void *arg); /* xstream event handler */typedef struct xstream_struct{ XML_Parser parser; xmlnode node; char *cdata; int cdata_len; pool p; xstream_onNode f; void *arg; int status; int depth;} *xstream, _xstream;xstream xstream_new(pool p, xstream_onNode f, void *arg); /* create a new xstream */int xstream_eat(xstream xs, char *buff, int len); /* parse new data for this xstream, returns last XSTREAM_* status *//* convience functions */xmlnode xstream_header(char *namespace, char *to, char *from);char *xstream_header_char(xmlnode x);typedef struct { unsigned long H[5]; unsigned long W[80]; int lenW; unsigned long sizeHi,sizeLo;} j_SHA_CTX;void shaInit(j_SHA_CTX *ctx);void shaUpdate(j_SHA_CTX *ctx, unsigned char *dataIn, int len);void shaFinal(j_SHA_CTX *ctx, unsigned char hashout[20]);void shaBlock(unsigned char *dataIn, int len, unsigned char hashout[20]);/********** END OLD libxode.h BEGIN OLD jabber.h *************//* --------------------------------------------------------- *//* *//* JID structures & constants *//* *//* --------------------------------------------------------- */#define JID_RESOURCE 1#define JID_USER 2#define JID_SERVER 4typedef struct jid_struct{ pool p; char* resource; char* user; char* server; char* full; struct jid_struct *next; /* for lists of jids */} *jid; jid jid_new(pool p, char *idstr); /* Creates a jabber id from the idstr */void jid_set(jid id, char *str, int item); /* Individually sets jid components */char* jid_full(jid id); /* Builds a string type=user/resource@server from the jid data */int jid_cmp(jid a, jid b); /* Compares two jid's, returns 0 for perfect match */int jid_cmpx(jid a, jid b, int parts); /* Compares just the parts specified as JID_|JID_ */jid jid_append(jid a, jid b); /* Appending b to a (list), no dups */xmlnode jid_xres(jid id); /* Returns xmlnode representation of the resource?query=string */xmlnode jid_nodescan(jid id, xmlnode x); /* Scans the children of the node for a matching jid attribute */jid jid_user(jid a); /* returns the same jid but just of the user@host part *//* --------------------------------------------------------- *//* *//* JPacket structures & constants *//* *//* --------------------------------------------------------- */#define JPACKET_UNKNOWN 0x00#define JPACKET_MESSAGE 0x01#define JPACKET_PRESENCE 0x02#define JPACKET_IQ 0x04#define JPACKET_S10N 0x08#define JPACKET__UNKNOWN 0#define JPACKET__NONE 1#define JPACKET__ERROR 2#define JPACKET__CHAT 3#define JPACKET__GROUPCHAT 4#define JPACKET__GET 5#define JPACKET__SET 6#define JPACKET__RESULT 7#define JPACKET__SUBSCRIBE 8#define JPACKET__SUBSCRIBED 9#define JPACKET__UNSUBSCRIBE 10#define JPACKET__UNSUBSCRIBED 11#define JPACKET__AVAILABLE 12#define JPACKET__UNAVAILABLE 13#define JPACKET__PROBE 14#define JPACKET__HEADLINE 15#define JPACKET__INVISIBLE 16typedef struct jpacket_struct{ unsigned char type; int subtype; int flag; void* aux1; xmlnode x; jid to; jid from; char* iqns; xmlnode iq; pool p;} *jpacket, _jpacket; jpacket jpacket_new(xmlnode x); /* Creates a jabber packet from the xmlnode */jpacket jpacket_reset(jpacket p); /* Resets the jpacket values based on the xmlnode */int jpacket_subtype(jpacket p); /* Returns the subtype value (looks at xmlnode for it) *//* --------------------------------------------------------- *//* *//* Presence Proxy DB structures & constants *//* *//* --------------------------------------------------------- */typedef struct ppdb_struct{ jid id; /* entry data */ int pri; xmlnode x; struct ppdb_struct* user; /* linked list for user@server */ pool p; /* db-level data */ struct ppdb_struct* next;} _ppdb, *ppdb;ppdb ppdb_insert(ppdb db, jid id, xmlnode x); /* Inserts presence into the proxy */xmlnode ppdb_primary(ppdb db, jid id); /* Fetches the matching primary presence for the id */void ppdb_free(ppdb db); /* Frees the db and all entries */xmlnode ppdb_get(ppdb db, jid id); /* Called successively to return each presence xmlnode */ /* for the id and children, returns NULL at the end *//* --------------------------------------------------------- *//* *//* Simple Jabber Rate limit functions *//* *//* --------------------------------------------------------- */typedef struct jlimit_struct{ char *key; int start; int points; int maxt, maxp; pool p;} *jlimit, _jlimit; jlimit jlimit_new(int maxt, int maxp);void jlimit_free(jlimit r);int jlimit_check(jlimit r, char *key, int points);// #define KARMA_DEBUG// default to disable karma #define KARMA_READ_MAX(k) (abs(k)*100) /* how much you are allowed to read off the sock */#define KARMA_INIT 5 /* internal "init" value */#define KARMA_HEARTBEAT 2 /* seconds to register for heartbeat */#define KARMA_MAX 10 /* total max karma you can have */#define KARMA_INC 1 /* how much to increment every KARMA_HEARTBEAT seconds */#define KARMA_DEC 0 /* how much to penalize for reading KARMA_READ_MAX in KARMA_HEARTBEAT seconds */#define KARMA_PENALTY -5 /* where you go when you hit 0 karma */#define KARMA_RESTORE 5 /* where you go when you payed your penelty or INIT */#define KARMA_RESETMETER 0 /* Reset byte meter on restore default is falst */struct karma{ int init; /* struct initialized */ int reset_meter; /* reset the byte meter on restore */ int val; /* current karma value */ long bytes; /* total bytes read (in that time period) */ int max; /* max karma you can have */ int inc,dec; /* how much to increment/decrement */ int penalty,restore; /* what penalty (<0) or restore (>0) */ time_t last_update; /* time this was last incremented */};struct karma *karma_new(pool p); /* creates a new karma object, with default values */void karma_copy(struct karma *new, struct karma *old); /* makes a copy of old in new */void karma_increment(struct karma *k); /* inteligently increments karma */void karma_decrement(struct karma *k, long bytes_read); /* inteligently decrements karma */int karma_check(struct karma *k,long bytes_read); /* checks to see if we have good karma *//* --------------------------------------------------------- *//* *//* Error structures & constants *//* *//* --------------------------------------------------------- */typedef struct terror_struct{ int code; char msg[64];} terror;#define TERROR_BAD (terror){400,"Bad Request"}#define TERROR_AUTH (terror){401,"Unauthorized"}#define TERROR_PAY (terror){402,"Payment Required"}#define TERROR_FORBIDDEN (terror){403,"Forbidden"}#define TERROR_NOTFOUND (terror){404,"Not Found"}#define TERROR_NOTALLOWED (terror){405,"Not Allowed"}#define TERROR_NOTACCEPTABLE (terror){406,"Not Acceptable"}#define TERROR_REGISTER (terror){407,"Registration Required"}#define TERROR_REQTIMEOUT (terror){408,"Request Timeout"}#define TERROR_CONFLICT (terror){409,"Conflict"}#define TERROR_INTERNAL (terror){500,"Internal Server Error"}#define TERROR_NOTIMPL (terror){501,"Not Implemented"}#define TERROR_EXTERNAL (terror){502,"Remote Server Error"}#define TERROR_UNAVAIL (terror){503,"Service Unavailable"}#define TERROR_EXTTIMEOUT (terror){504,"Remote Server Timeout"}#define TERROR_DISCONNECTED (terror){510,"Disconnected"}/* --------------------------------------------------------- *//* *//* Namespace constants *//* *//* --------------------------------------------------------- */#define NSCHECK(x,n) (j_strcmp(xmlnode_get_attrib(x,"xmlns"),n) == 0)#define NS_CLIENT "jabber:client"#define NS_SERVER "jabber:server"#define NS_AUTH "jabber:iq:auth"#define NS_AUTH_CRYPT "jabber:iq:auth:crypt"#define NS_REGISTER "jabber:iq:register"#define NS_ROSTER "jabber:iq:roster"#define NS_OFFLINE "jabber:x:offline"#define NS_AGENT "jabber:iq:agent"#define NS_AGENTS "jabber:iq:agents"#define NS_DELAY "jabber:x:delay"#define NS_VERSION "jabber:iq:version"#define NS_TIME "jabber:iq:time"#define NS_VCARD "vcard-temp"#define NS_PRIVATE "jabber:iq:private"#define NS_SEARCH "jabber:iq:search"#define NS_OOB "jabber:iq:oob"#define NS_XOOB "jabber:x:oob"#define NS_ADMIN "jabber:iq:admin"#define NS_FILTER "jabber:iq:filter"#define NS_AUTH_0K "jabber:iq:auth:0k"#define NS_BROWSE "jabber:iq:browse"#define NS_EVENT "jabber:x:event"#define NS_CONFERENCE "jabber:iq:conference"#define NS_SIGNED "jabber:x:signed"#define NS_ENCRYPTED "jabber:x:encrypted"#define NS_GATEWAY "jabber:iq:gateway"#define NS_LAST "jabber:iq:last"#define NS_ENVELOPE "jabber:x:envelope"#define NS_EXPIRE "jabber:x:expire"#define NS_XHTML "http://www.w3.org/1999/xhtml"#define NS_XDBGINSERT "jabber:xdb:ginsert"#define NS_XDBNSLIST "jabber:xdb:nslist"/* --------------------------------------------------------- *//* *//* JUtil functions *//* *//* --------------------------------------------------------- */xmlnode jutil_presnew(int type, char *to, char *status); /* Create a skeleton presence packet */xmlnode jutil_iqnew(int type, char *ns); /* Create a skeleton iq packet */xmlnode jutil_msgnew(char *type, char *to, char *subj, char *body); /* Create a skeleton message packet */xmlnode jutil_header(char* xmlns, char* server); /* Create a skeleton stream packet */int jutil_priority(xmlnode x); /* Determine priority of this packet */void jutil_tofrom(xmlnode x); /* Swaps to/from fields on a packet */xmlnode jutil_iqresult(xmlnode x); /* Generate a skeleton iq/result, given a iq/query */char* jutil_timestamp(void); /* Get stringified timestamp */void jutil_error(xmlnode x, terror E); /* Append an <error> node to x */void jutil_delay(xmlnode msg, char *reason); /* Append a delay packet to msg */char* jutil_regkey(char *key, char *seed); /* pass a seed to generate a key, pass the key again to validate (returns it) */#ifdef __cplusplus}#endif#endif /* INCL_LIB_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -