1 /* 2 ** Jabby (a C library for Jabber protocol) 3 ** Copyright (c) 2002 Hubert Soko�owski <who_ami@tlen.pl> 4 ** 5 ** This code is free software; you can redistribute it and/or 6 ** modify it under the terms of the GNU General Public License. 7 ** 8 */ 9 10 11 #include "jabby.h" 12 #include "search.h" 13 14 #include <string.h> 15 16 GList *events_list; 17 jabby_event_new(enum jabby_event_type type)18jabby_event *jabby_event_new(enum jabby_event_type type) 19 { 20 jabby_event *event; 21 22 event = g_malloc(sizeof(*event)); 23 memset(event, 0, sizeof(*event)); 24 event->type = type; 25 switch(type) 26 { 27 case JABBY_EVENT_ERROR: 28 break; 29 case JABBY_EVENT_MESSAGE: 30 break; 31 case JABBY_EVENT_SUBSCRIBE: 32 break; 33 case JABBY_EVENT_SUBSCRIBED: 34 break; 35 case JABBY_EVENT_UNSUBSCRIBE: 36 break; 37 case JABBY_EVENT_UNSUBSCRIBED: 38 break; 39 case JABBY_EVENT_ROSTER_ITEM: 40 // event->event.roster->jid = g_strdup(); 41 break; 42 case JABBY_EVENT_ROSTER_END: 43 break; 44 case JABBY_EVENT_PRESENCE: 45 break; 46 case JABBY_EVENT_UNAUTHORIZED: 47 break; 48 case JABBY_EVENT_CONNECTION_FAILED: 49 break; 50 case JABBY_EVENT_SEARCH_ITEM: 51 break; 52 case JABBY_EVENT_SEARCH_END: 53 break; 54 case JABBY_EVENT_AGENT: 55 break; 56 case JABBY_EVENT_AGENTS_END: 57 break; 58 case JABBY_EVENT_REGISTERED: 59 break; 60 default: 61 g_print("Unknown event type passed to jabby_event_new !\n"); 62 g_free(event); 63 return NULL; 64 } 65 return event; 66 } 67 jabby_event_registered_new()68jabby_event_registered* jabby_event_registered_new() 69 { 70 jabby_event_registered *reg; 71 72 reg = g_malloc(sizeof(*reg)); 73 memset(reg, 0, sizeof(*reg)); 74 return reg; 75 } 76 jabby_event_agent_new()77jabby_event_agent* jabby_event_agent_new() 78 { 79 jabby_event_agent *agent; 80 81 agent = g_malloc(sizeof(*agent)); 82 memset(agent, 0, sizeof(*agent)); 83 return agent; 84 } 85 jabby_event_free(jabby_event * event)86void jabby_event_free(jabby_event *event) 87 { 88 switch(event->type) 89 { 90 case JABBY_EVENT_ROSTER_ITEM: 91 g_free(event->event.roster->jid); 92 g_free(event->event.roster->name); 93 g_free(event->event.roster->group); 94 g_free(event->event.roster->subscription); 95 g_free(event->event.roster); 96 break; 97 case JABBY_EVENT_ERROR: 98 g_free(event->event.error->message); 99 break; 100 case JABBY_EVENT_MESSAGE: 101 g_free(event->event.message->from); 102 g_free(event->event.message->id); 103 g_free(event->event.message->body); 104 g_free(event->event.message->subject); 105 g_free(event->event.message->thread); 106 g_free(event->event.message->error); 107 g_free(event->event.message->delay); 108 break; 109 case JABBY_EVENT_PRESENCE: 110 g_free(event->event.presence->from); 111 g_free(event->event.presence->message); 112 break; 113 case JABBY_EVENT_SUBSCRIBE: 114 g_free(event->event.subscribe->from); 115 g_free(event->event.subscribe->status); 116 break; 117 case JABBY_EVENT_SUBSCRIBED: 118 g_free(event->event.subscribed->from); 119 break; 120 case JABBY_EVENT_UNSUBSCRIBE: 121 g_free(event->event.unsubscribe->from); 122 g_free(event->event.unsubscribe->status); 123 break; 124 case JABBY_EVENT_UNSUBSCRIBED: 125 g_free(event->event.unsubscribed->from); 126 g_free(event->event.unsubscribed->status); 127 break; 128 case JABBY_EVENT_SEARCH_ITEM: 129 jabby_search_res_free(event->event.search); 130 break; 131 case JABBY_EVENT_AGENT: 132 g_free(event->event.agent->jid); 133 g_free(event->event.agent->name); 134 g_free(event->event.agent->service); 135 g_free(event->event.agent->transport); 136 g_free(event->event.agent); 137 break; 138 case JABBY_EVENT_REGISTERED: 139 g_free(event->event.registered->to); 140 g_free(event->event.registered); 141 break; 142 default: 143 break; 144 } 145 g_free(event); 146 } 147 jabby_event_add(jabby_event * event)148void jabby_event_add(jabby_event *event) 149 { 150 events_list = g_list_append(events_list, event); 151 } 152 jabby_event_get()153jabby_event *jabby_event_get() 154 { 155 jabby_event *event = NULL; 156 GList *first; 157 158 first = g_list_first(events_list); 159 if(first) 160 { 161 event = (jabby_event*) first->data; 162 events_list = g_list_remove(events_list, first->data); 163 } 164 return event; 165 } 166 167