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 #include "jabby.h"
11 #include <string.h>
12 
jabby_search_res_new()13 jabby_search_res *jabby_search_res_new()
14 {
15   jabby_search_res *search;
16 
17   search = g_malloc(sizeof(*search));
18   memset(search, '\0', sizeof(*search));
19   return search;
20 }
21 
jabby_search_set_new()22 jabby_search_set *jabby_search_set_new()
23 {
24   jabby_search_set *search;
25 
26   search = g_malloc(sizeof(*search));
27   memset(search, '\0', sizeof(*search));
28   return search;
29 }
30 
jabby_search_res_free(jabby_search_res * search)31 void jabby_search_res_free(jabby_search_res *search)
32 {
33   g_free(search->id);
34   g_free(search->first);
35   g_free(search->last);
36   g_free(search->city);
37   g_free(search->nick);
38   g_free(search);
39 }
40 
jabby_search_set_free(jabby_search_set * search)41 void jabby_search_set_free(jabby_search_set *search)
42 {
43   g_free(search->id);
44   g_free(search->first);
45   g_free(search->last);
46   g_free(search->city);
47   g_free(search);
48 }
49 
jabby_search_wp(jabby_session * ses,jabby_search_set * search)50 void jabby_search_wp(jabby_session *ses, jabby_search_set *search)
51 {
52   iks *x, *y, *d, *field, *value;
53   gchar *s;
54 
55   x = iks_new("iq");
56   iks_insert_attrib(x, "type", "set");
57   iks_insert_attrib(x, "to", "search.jabber.wp.pl");
58   iks_insert_attrib(x, "id", "search");
59   y = iks_insert(x, "query");
60   iks_insert_attrib(y, "xmlns", IKS_NS_SEARCH);
61   d = iks_insert(y, "x");
62   iks_insert_attrib(d, "xmlns", "jabber:x:data");
63   if(search->id)
64   {
65     field = iks_insert(d, "field");
66     iks_insert_attrib(field, "var", "nick");
67     value = iks_insert(field, "value");
68     iks_insert_cdata(value, search->id, -1);
69   }
70   if(search->first)
71   {
72     field = iks_insert(d, "field");
73     iks_insert_attrib(field, "var", "first");
74     value = iks_insert(field, "value");
75     iks_insert_cdata(value, search->first, -1);
76   }
77   if(search->last)
78   {
79     field = iks_insert(d, "field");
80     iks_insert_attrib(field, "var", "last");
81     value = iks_insert(field, "value");
82     iks_insert_cdata(value, search->last, -1);
83   }
84   if(search->city)
85   {
86     field = iks_insert(d, "field");
87     iks_insert_attrib(field, "var", "city");
88     value = iks_insert(field, "value");
89     iks_insert_cdata(value, search->city, -1);
90   }
91   if(search->age_min)
92   {
93     field = iks_insert(d, "field");
94     iks_insert_attrib(field, "var", "age_min");
95     value = iks_insert(field, "value");
96     s = g_strdup_printf("%d", search->age_min);
97     iks_insert_cdata(value, s, -1);
98     g_free(s);
99   }
100   if(search->age_max)
101   {
102     field = iks_insert(d, "field");
103     iks_insert_attrib(field, "var", "age_max");
104     value = iks_insert(field, "value");
105     s = g_strdup_printf("%d", search->age_max);
106     iks_insert_cdata(value, s, -1);
107     g_free(s);
108   }
109   if(search->population)
110   {
111     field = iks_insert(d, "field");
112     iks_insert_attrib(field, "var", "population");
113     value = iks_insert(field, "value");
114     s = g_strdup_printf("%d", search->population);
115     iks_insert_cdata(value, s, -1);
116     g_free(s);
117   }
118   if(search->province)
119   {
120     field = iks_insert(d, "field");
121     iks_insert_attrib(field, "var", "province");
122     value = iks_insert(field, "value");
123     s = g_strdup_printf("%d", search->province);
124     iks_insert_cdata(value, s, -1);
125     g_free(s);
126   }
127   if(search->sex)
128   {
129     field = iks_insert(d, "field");
130     iks_insert_attrib(field, "var", "sex");
131     value = iks_insert(field, "value");
132     s = g_strdup_printf("%d", search->sex);
133     iks_insert_cdata(value, s, -1);
134     g_free(s);
135   }
136   if(search->occupation)
137   {
138     field = iks_insert(d, "field");
139     iks_insert_attrib(field, "var", "occupation");
140     value = iks_insert(field, "value");
141     s = g_strdup_printf("%d", search->occupation);
142     iks_insert_cdata(value, s, -1);
143     g_free(s);
144   }
145   if(search->online)
146   {
147     field = iks_insert(d, "field");
148     iks_insert_attrib(field, "var", "online");
149     value = iks_insert(field, "value");
150     s = g_strdup_printf("%d", search->online);
151     iks_insert_cdata(value, s, -1);
152     g_free(s);
153   }
154   iks_send(ses->parser, x);
155   iks_delete(x);
156 }
157 
158