12
#include <glib/gprintf.h>
15
#include <curl/curl.h>
16
#include <curl/types.h>
17
#include <curl/easy.h>
27
cb_write_to_mem(void *ptr, size_t size, size_t nmemb, void *data)
29
size_t realsize = size * nmemb;
30
struct mem_struct *mem = (struct mem_struct *)data;
32
mem->memory = (char *)g_realloc(mem->memory, mem->size + realsize + 1);
36
memcpy(&(mem->memory[mem->size]), ptr, realsize);
37
mem->size += realsize;
38
mem->memory[mem->size] = 0;
43
static GdkPixbuf *friend_icon = NULL;
44
static GdkGC *gc_map = NULL;
75
label_msg = (GtkLabel *)lookup_widget(window1, "label51");
76
gtk_label_set_label(label_msg, "Connecting...");
78
printf("*** %s(): \n",__PRETTY_FUNCTION__);
80
if (!g_thread_create(&update_position_thread, NULL, FALSE, NULL) != 0)
81
g_warning("### can't create friend thread\n");
87
update_position_thread(void *ptr)
91
GtkToggleButton *v_public, *v_member, *v_friend;
92
GtkToggleButton *g_public, *g_member, *g_friend;
93
GtkEntry *nick, *pass, *email, *msg;
95
const gchar *n, *p, *e, *m;
96
gchar *vp, *vm, *vf, *gp, *gm, *gf, *ff_mode;
97
static gchar lat[64], lon[64], mode[64];
98
static gchar alt[16] = "0", speed[16] = "0", head[16]="0";
101
gchar **user_data_sets;
102
long int response_code;
106
struct curl_httppost *formdata=NULL;
107
struct curl_httppost *lastptr=NULL;
109
struct mem_struct chunk;
114
printf("*** %s(): \n",__PRETTY_FUNCTION__);
117
label_msg = (GtkLabel *)lookup_widget(window1, "label51");
120
v_public = (GtkToggleButton *)lookup_widget(window1, "checkbutton3");
121
v_member = (GtkToggleButton *)lookup_widget(window1, "checkbutton4");
122
v_friend = (GtkToggleButton *)lookup_widget(window1, "checkbutton5");
123
g_public = (GtkToggleButton *)lookup_widget(window1, "checkbutton6");
124
g_member = (GtkToggleButton *)lookup_widget(window1, "checkbutton7");
125
g_friend = (GtkToggleButton *)lookup_widget(window1, "checkbutton8");
126
nick = (GtkEntry *)lookup_widget(window1, "entry7");
127
pass = (GtkEntry *)lookup_widget(window1, "entry8");
128
email = (GtkEntry *)lookup_widget(window1, "entry9");
129
msg = (GtkEntry *)lookup_widget(window1, "entry29");
131
vp = (gtk_toggle_button_get_active(v_public)) ? g_strdup("y") : g_strdup("n");
132
vm = (gtk_toggle_button_get_active(v_member)) ? g_strdup("y") : g_strdup("n");
133
vf = (gtk_toggle_button_get_active(v_friend)) ? g_strdup("y") : g_strdup("n");
134
gp = (gtk_toggle_button_get_active(g_public)) ? g_strdup("y") : g_strdup("n");
135
gm = (gtk_toggle_button_get_active(g_member)) ? g_strdup("y") : g_strdup("n");
136
gf = (gtk_toggle_button_get_active(g_friend)) ? g_strdup("y") : g_strdup("n");
138
switch (global_ff_mode) {
140
ff_mode = g_strdup("private");
143
ff_mode = g_strdup("friends");
146
ff_mode = g_strdup("fun");
149
ff_mode = g_strdup("");
152
n = gtk_entry_get_text(nick);
153
p = gtk_entry_get_text(pass);
154
e = gtk_entry_get_text(email);
155
m = gtk_entry_get_text(msg);
158
if (global_myposition.lat && global_myposition.lon)
160
g_sprintf(lat, "%f", global_myposition.lat);
161
g_sprintf(lon, "%f", global_myposition.lon);
162
g_sprintf(mode, "%s|%dx%d", "man", global_drawingarea_width, global_drawingarea_height);
164
else if (gpsdata && gpsdata->fix.latitude !=0)
166
g_sprintf(lat, "%f", gpsdata->fix.latitude);
167
g_sprintf(lon, "%f", gpsdata->fix.longitude);
168
g_sprintf(mode, "%s|%dx%d", "gps", global_drawingarea_width, global_drawingarea_height);
172
float tmplat, tmplon;
174
tmplat = rad2deg( pixel2lat(global_zoom, global_y+global_drawingarea_height/2) );
175
tmplon = rad2deg( pixel2lon(global_zoom, global_x+global_drawingarea_width/2) );
176
g_sprintf(lat, "%f", tmplat);
177
g_sprintf(lon, "%f", tmplon);
178
g_sprintf(mode, "%s|%dx%d", "atm", global_drawingarea_width, global_drawingarea_height);
180
printf("## friends: neither fix, no manual position %f %f\n", tmplat, tmplon);
187
g_snprintf(alt, 16, "%.1f", gpsdata->fix.altitude);
188
g_snprintf(head, 16, "%.1f", gpsdata->fix.track);
189
g_snprintf(speed, 16, "%.1f", gpsdata->fix.speed);
192
curl_global_init(CURL_GLOBAL_ALL);
194
curl_formadd(&formdata,
196
CURLFORM_COPYNAME, "lat",
197
CURLFORM_COPYCONTENTS, lat,
200
curl_formadd(&formdata,
202
CURLFORM_COPYNAME, "lon",
203
CURLFORM_COPYCONTENTS, lon,
206
curl_formadd(&formdata,
208
CURLFORM_COPYNAME, "alt",
209
CURLFORM_COPYCONTENTS, alt,
212
curl_formadd(&formdata,
214
CURLFORM_COPYNAME, "head",
215
CURLFORM_COPYCONTENTS, head,
218
curl_formadd(&formdata,
220
CURLFORM_COPYNAME, "speed",
221
CURLFORM_COPYCONTENTS, speed,
224
curl_formadd(&formdata,
226
CURLFORM_COPYNAME, "mode",
227
CURLFORM_COPYCONTENTS, mode,
230
curl_formadd(&formdata,
232
CURLFORM_COPYNAME, "ff_mode",
233
CURLFORM_COPYCONTENTS, ff_mode,
236
curl_formadd(&formdata,
238
CURLFORM_COPYNAME, "nick",
239
CURLFORM_COPYCONTENTS, n,
242
curl_formadd(&formdata,
244
CURLFORM_COPYNAME, "pass",
245
CURLFORM_COPYCONTENTS, p,
248
curl_formadd(&formdata,
250
CURLFORM_COPYNAME, "msg",
251
CURLFORM_COPYCONTENTS, m,
254
curl_formadd(&formdata,
256
CURLFORM_COPYNAME, "v_public",
257
CURLFORM_COPYCONTENTS, vp,
260
curl_formadd(&formdata,
262
CURLFORM_COPYNAME, "v_member",
263
CURLFORM_COPYCONTENTS, vm,
267
curl_formadd(&formdata,
269
CURLFORM_COPYNAME, "v_friend",
270
CURLFORM_COPYCONTENTS, vf,
274
curl_formadd(&formdata,
276
CURLFORM_COPYNAME, "g_public",
277
CURLFORM_COPYCONTENTS, gp,
280
curl_formadd(&formdata,
282
CURLFORM_COPYNAME, "g_member",
283
CURLFORM_COPYCONTENTS, gm,
287
curl_formadd(&formdata,
289
CURLFORM_COPYNAME, "g_friend",
290
CURLFORM_COPYCONTENTS, gf,
294
curl_handle = curl_easy_init();
296
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.tangogps.org/friends/update_pos.php");
297
curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, formdata);
298
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, cb_write_to_mem);
299
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
300
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0 |" VERSION " | " __VERSION__);
304
curl_easy_perform(curl_handle);
305
curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &response_code);
308
curl_easy_cleanup(curl_handle);
310
printf("REPLY: %s - response: %d\n",chunk.memory, (int)response_code);
317
if (response_code == 200)
324
user_data_sets = g_strsplit_set (chunk.memory, "|", -1);
328
g_slist_free(friends_list);
330
gtk_label_set_label(label_msg, user_data_sets[0]);
333
while (user_data_sets[i] && !g_str_equal(user_data_sets[i],"EOD") )
337
friend_t *friend = g_new0(friend_t,1);
339
array = g_strsplit(user_data_sets[i],"#",-1);
340
while (array[len]) len++;
348
friend->type = atoi(g_strdup(array[0]));
349
friend->nick = g_strdup(array[1]);
350
friend->lat = atof(g_strdup(array[2]));printf("##%f\n",friend->lat);
351
friend->lon = atof(g_strdup(array[3]));
352
friend->head = atoi(g_strdup(array[4]));
353
friend->lastseen = g_strdup(array[5]);
354
friend->msg = g_strdup(array[6]);
356
friends_list = g_slist_append(friends_list, friend);
366
gtk_label_set_text(label_msg, "No response (200)");
381
g_free(chunk.memory);
383
curl_global_cleanup();
400
int pixel_x, pixel_y, x,y;
404
GError *error = NULL;
406
gc = gdk_gc_new(pixmap);
410
gdk_gc_set_rgb_fg_color(gc, &color);
415
friend_icon = gdk_pixbuf_new_from_file_at_size (
416
PACKAGE_PIXMAPS_DIR "/tangogps-friend.png", 24,24,
419
if (pixmap && !gc_map)
420
gc_map = gdk_gc_new(pixmap);
424
printf("*** %s(): \n",__PRETTY_FUNCTION__);
426
if (global_show_friends)
428
for(list = friends_list; list != NULL; list = list->next)
430
friend_t *f = list->data;
432
lat = deg2rad(f->lat);
433
lon = deg2rad(f->lon);
438
pixel_x = lon2pixel(global_zoom, lon);
439
pixel_y = lat2pixel(global_zoom, lat);
441
x = pixel_x - global_x;
442
y = pixel_y - global_y;
469
GDK_RGB_DITHER_NONE, 0, 0);
471
gtk_widget_queue_draw_area (
476
printf("FRIEND: %s lat %f - lon %f\n",f->nick,f->lat, f->lon);
487
printf("*** %s(): \n",__PRETTY_FUNCTION__);
489
curl = curl_easy_init();
493
curl_easy_setopt(curl, CURLOPT_URL,
494
"127.0.0.1/friends/update_position.php?lat=1&lon=1");
495
res = curl_easy_perform(curl);
497
curl_easy_cleanup(curl);
513
label_msg = (GtkLabel *)lookup_widget(window1, "label62");
514
gtk_label_set_text(label_msg, "Connecting...");
516
printf("*** %s(): \n",__PRETTY_FUNCTION__);
518
if (!g_thread_create(®ister_nick_thread, NULL, FALSE, NULL) != 0)
519
g_warning("### can't create register_nick() thread\n");
525
register_nick_thread(void *ptr)
528
GtkEntry *nick, *pass, *email;
530
const gchar *n, *p, *e;
537
struct curl_httppost *formdata=NULL;
538
struct curl_httppost *lastptr=NULL;
540
struct mem_struct chunk;
545
printf("*** %s(): \n",__PRETTY_FUNCTION__);
550
nick = (GtkEntry *)lookup_widget(window1, "entry7");
551
pass = (GtkEntry *)lookup_widget(window1, "entry8");
552
email = (GtkEntry *)lookup_widget(window1, "entry9");
554
n = gtk_entry_get_text(nick);
555
p = gtk_entry_get_text(pass);
556
e = gtk_entry_get_text(email);
559
curl_global_init(CURL_GLOBAL_ALL);
562
curl_formadd(&formdata,
564
CURLFORM_COPYNAME, "nick",
565
CURLFORM_COPYCONTENTS, n,
568
curl_formadd(&formdata,
570
CURLFORM_COPYNAME, "pass",
571
CURLFORM_COPYCONTENTS, p,
574
curl_formadd(&formdata,
576
CURLFORM_COPYNAME, "email",
577
CURLFORM_COPYCONTENTS, e,
582
curl_handle = curl_easy_init();
584
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.tangogps.org/friends/register_nick.php");
585
curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, formdata);
586
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, cb_write_to_mem);
587
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
588
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
591
curl_easy_perform(curl_handle);
592
curl_easy_cleanup(curl_handle);
594
printf("REPLY: %s %d \n",chunk.memory, (int)chunk.size);
596
if((int)chunk.size > 0){
597
buffer = g_strdup(chunk.memory);
600
buffer = g_strdup("Oh. Some error occurred...");
603
label_msg = (GtkLabel *)lookup_widget(window1, "label62");
604
gtk_label_set_text(label_msg, buffer);
611
curl_global_cleanup();