| 358 } |
358 } |
| 359 } |
359 } |
| 360 |
360 |
| 361 static gboolean do_login(PurpleConnection *gc) { |
361 static gboolean do_login(PurpleConnection *gc) { |
| 362 char *buf, *tmp = NULL; |
362 char *buf, *tmp = NULL; |
| 363 const char *hostname; |
363 char *hostname, *server; |
| |
364 const char *hosttmp; |
| 364 const char *username, *realname; |
365 const char *username, *realname; |
| 365 struct irc_conn *irc = gc->proto_data; |
366 struct irc_conn *irc = gc->proto_data; |
| 366 const char *pass = purple_connection_get_password(gc); |
367 const char *pass = purple_connection_get_password(gc); |
| 367 |
368 |
| 368 if (pass && *pass) { |
369 if (pass && *pass) { |
| 372 return FALSE; |
373 return FALSE; |
| 373 } |
374 } |
| 374 g_free(buf); |
375 g_free(buf); |
| 375 } |
376 } |
| 376 |
377 |
| 377 hostname = purple_get_host_name(); |
|
| 378 realname = purple_account_get_string(irc->account, "realname", ""); |
378 realname = purple_account_get_string(irc->account, "realname", ""); |
| 379 username = purple_account_get_string(irc->account, "username", ""); |
379 username = purple_account_get_string(irc->account, "username", ""); |
| 380 |
380 |
| 381 if (username == NULL || *username == '\0') { |
381 if (username == NULL || *username == '\0') { |
| 382 username = g_get_user_name(); |
382 username = g_get_user_name(); |
| 387 while ((buf = strchr(tmp, ' ')) != NULL) { |
387 while ((buf = strchr(tmp, ' ')) != NULL) { |
| 388 *buf = '_'; |
388 *buf = '_'; |
| 389 } |
389 } |
| 390 } |
390 } |
| 391 |
391 |
| 392 buf = irc_format(irc, "vvvv:", "USER", tmp ? tmp : username, hostname, irc->server, |
392 hosttmp = purple_get_host_name(); |
| 393 strlen(realname) ? realname : IRC_DEFAULT_ALIAS); |
393 if (*hosttmp == ':') { |
| |
394 /* This is either an IPv6 address, or something which |
| |
395 * doesn't belong here. Either way, we need to escape |
| |
396 * it. */ |
| |
397 hostname = g_strdup_printf("0%s", hosttmp); |
| |
398 } else { |
| |
399 /* Ugly, I know. */ |
| |
400 hostname = g_strdup(hosttmp); |
| |
401 } |
| |
402 |
| |
403 if (*irc->server == ':') { |
| |
404 /* Same as hostname, above. */ |
| |
405 server = g_strdup_printf("0%s", irc->server); |
| |
406 } else { |
| |
407 server = g_strdup(irc->server); |
| |
408 } |
| |
409 |
| |
410 buf = irc_format(irc, "vvvv:", "USER", tmp ? tmp : username, hostname, server, |
| |
411 strlen(realname) ? realname : IRC_DEFAULT_ALIAS); |
| 394 g_free(tmp); |
412 g_free(tmp); |
| |
413 g_free(hostname); |
| |
414 g_free(server); |
| 395 if (irc_send(irc, buf) < 0) { |
415 if (irc_send(irc, buf) < 0) { |
| 396 g_free(buf); |
416 g_free(buf); |
| 397 return FALSE; |
417 return FALSE; |
| 398 } |
418 } |
| 399 g_free(buf); |
419 g_free(buf); |