mcabber/mcabber/xmpp.c
changeset 1810 8c2651fc217a
parent 1800 d2747442918a
child 1811 e6d355e50d7a
equal deleted inserted replaced
1809:eef8c9fff727 1810:8c2651fc217a
  1632     g_free(msg);
  1632     g_free(msg);
  1633   }
  1633   }
  1634 }
  1634 }
  1635 
  1635 
  1636 
  1636 
  1637 void xmpp_connect(void)
  1637 //  xmpp_connect()
       
  1638 // Return a non-zero value if there's an obvious problem
       
  1639 // (no JID, no password, etc.)
       
  1640 gint xmpp_connect(void)
  1638 {
  1641 {
  1639   const char *userjid, *password, *resource, *servername, *ssl_fpr;
  1642   const char *userjid, *password, *resource, *servername, *ssl_fpr;
  1640   char *dynresource = NULL;
  1643   char *dynresource = NULL;
  1641   char fpr[16];
  1644   char fpr[16];
  1642   const char *proxy_host;
  1645   const char *proxy_host;
  1658   proxy_host = settings_opt_get("proxy_host");
  1661   proxy_host = settings_opt_get("proxy_host");
  1659   ssl_fpr    = settings_opt_get("ssl_fingerprint");
  1662   ssl_fpr    = settings_opt_get("ssl_fingerprint");
  1660 
  1663 
  1661   if (!userjid) {
  1664   if (!userjid) {
  1662     scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!");
  1665     scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!");
  1663     return;
  1666     return -1;
  1664   }
  1667   }
  1665   if (!password) {
  1668   if (!password) {
  1666     scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!");
  1669     scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!");
  1667     return;
  1670     return -1;
  1668   }
  1671   }
  1669 
  1672 
  1670   lconnection = lm_connection_new_with_context(NULL, main_context);
  1673   lconnection = lm_connection_new_with_context(NULL, main_context);
  1671 
  1674 
  1672   g_log_set_handler("LM", LM_LOG_LEVEL_ALL, lm_debug_handler, NULL);
  1675   g_log_set_handler("LM", LM_LOG_LEVEL_ALL, lm_debug_handler, NULL);
  1768 
  1771 
  1769   if (!lm_ssl_is_supported()) {
  1772   if (!lm_ssl_is_supported()) {
  1770     if (ssl || tls) {
  1773     if (ssl || tls) {
  1771       scr_LogPrint(LPRINT_LOGNORM, "** Error: SSL is NOT available, "
  1774       scr_LogPrint(LPRINT_LOGNORM, "** Error: SSL is NOT available, "
  1772                    "please recompile loudmouth with SSL enabled.");
  1775                    "please recompile loudmouth with SSL enabled.");
  1773       return;
  1776       return -1;
  1774     }
  1777     }
  1775   }
  1778   }
  1776 
  1779 
  1777   if (ssl && tls) {
  1780   if (ssl && tls) {
  1778     scr_LogPrint(LPRINT_LOGNORM, "You can only set ssl or tls, not both.");
  1781     scr_LogPrint(LPRINT_LOGNORM, "You can only set ssl or tls, not both.");
  1779     return;
  1782     return -1;
  1780   }
  1783   }
  1781 
  1784 
  1782   if (!port)
  1785   if (!port)
  1783     port = (ssl ? LM_CONNECTION_DEFAULT_PORT_SSL : LM_CONNECTION_DEFAULT_PORT);
  1786     port = (ssl ? LM_CONNECTION_DEFAULT_PORT_SSL : LM_CONNECTION_DEFAULT_PORT);
  1784   lm_connection_set_port(lconnection, port);
  1787   lm_connection_set_port(lconnection, port);
  1785 
  1788 
  1786   if (ssl_fpr && (!hex_to_fingerprint(ssl_fpr, fpr))) {
  1789   if (ssl_fpr && (!hex_to_fingerprint(ssl_fpr, fpr))) {
  1787     scr_LogPrint(LPRINT_LOGNORM, "** Plese set the fingerprint in the format "
  1790     scr_LogPrint(LPRINT_LOGNORM, "** Please set the fingerprint in the format "
  1788                  "97:5C:00:3F:1D:77:45:25:E2:C5:70:EC:83:C8:87:EE");
  1791                  "97:5C:00:3F:1D:77:45:25:E2:C5:70:EC:83:C8:87:EE");
  1789     return;
  1792     return -1;
  1790   }
  1793   }
  1791 
  1794 
  1792   lssl = lm_ssl_new((ssl_fpr ? fpr : NULL), ssl_cb, NULL, NULL);
  1795   lssl = lm_ssl_new((ssl_fpr ? fpr : NULL), ssl_cb, NULL, NULL);
  1793   if (lssl) {
  1796   if (lssl) {
  1794     lm_ssl_use_starttls(lssl, !ssl, tls);
  1797     lm_ssl_use_starttls(lssl, !ssl, tls);
  1795     lm_connection_set_ssl(lconnection, lssl);
  1798     lm_connection_set_ssl(lconnection, lssl);
  1796     lm_ssl_unref(lssl);
  1799     lm_ssl_unref(lssl);
  1797   } else if (ssl || tls) {
  1800   } else if (ssl || tls) {
  1798     scr_LogPrint(LPRINT_LOGNORM, "** Error: Couldn't create SSL struct.");
  1801     scr_LogPrint(LPRINT_LOGNORM, "** Error: Couldn't create SSL struct.");
  1799     return;
  1802     return -1;
  1800   }
  1803   }
  1801 
  1804 
  1802   if (!lm_connection_open(lconnection, connection_open_cb,
  1805   if (!lm_connection_open(lconnection, connection_open_cb,
  1803                           NULL, FALSE, &error)) {
  1806                           NULL, FALSE, &error)) {
  1804     _try_to_reconnect();
  1807     _try_to_reconnect();
  1805     scr_LogPrint(LPRINT_LOGNORM, "Failed to open: %s", error->message);
  1808     scr_LogPrint(LPRINT_LOGNORM, "Failed to open: %s", error->message);
  1806     g_error_free (error);
  1809     g_error_free(error);
  1807   }
  1810   }
       
  1811   return 0;
  1808 }
  1812 }
  1809 
  1813 
  1810 //  insert_entity_capabilities(presence_stanza)
  1814 //  insert_entity_capabilities(presence_stanza)
  1811 // Entity Capabilities (XEP-0115)
  1815 // Entity Capabilities (XEP-0115)
  1812 static void insert_entity_capabilities(LmMessageNode *x, enum imstatus status)
  1816 static void insert_entity_capabilities(LmMessageNode *x, enum imstatus status)