author | Mikael Hallendal <micke@imendio.com> |
Tue, 04 Mar 2008 00:38:08 +0100 | |
changeset 349 | 3dafc8376e9b |
parent 167 | 7bcccfa734e2 |
child 482 | 08a9810b415b |
permissions | -rw-r--r-- |
83 | 1 |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ |
2 |
/* |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
3 |
* Copyright (C) 2003-2006 Imendio AB |
83 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or |
|
6 |
* modify it under the terms of the GNU Lesser General Public License as |
|
7 |
* published by the Free Software Foundation; either version 2 of the |
|
8 |
* License, or (at your option) any later version. |
|
9 |
* |
|
10 |
* This program is distributed in the hope that it will be useful, |
|
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
13 |
* Lesser General Public License for more details. |
|
14 |
* |
|
15 |
* You should have received a copy of the GNU Lesser General Public |
|
16 |
* License along with this program; if not, write to the |
|
17 |
* Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
18 |
* Boston, MA 02111-1307, USA. |
|
19 |
*/ |
|
20 |
||
21 |
#include <config.h> |
|
22 |
||
23 |
#include <string.h> |
|
24 |
#include <stdlib.h> |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
25 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
26 |
#include <glib.h> |
83 | 27 |
#include <loudmouth/loudmouth.h> |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
28 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
29 |
static GMainLoop *main_loop = NULL; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
30 |
static gboolean test_success = FALSE; |
83 | 31 |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
32 |
static gchar expected_fingerprint[20]; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
33 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
34 |
static gchar *server = NULL; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
35 |
static gint port = 5222; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
36 |
static gchar *username = NULL; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
37 |
static gchar *password = NULL; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
38 |
static gchar *resource = "test-lm"; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
39 |
static gchar *fingerprint = NULL; |
83 | 40 |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
41 |
static GOptionEntry entries[] = |
83 | 42 |
{ |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
43 |
{ "server", 's', 0, G_OPTION_ARG_STRING, &server, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
44 |
"Server to connect to", NULL }, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
45 |
{ "port", 'P', 0, G_OPTION_ARG_INT, &port, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
46 |
"Port to connect to [default=5222]", NULL }, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
47 |
{ "username", 'u', 0, G_OPTION_ARG_STRING, &username, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
48 |
"Username to connect with (e.g. 'user' in user@server.org)", NULL }, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
49 |
{ "password", 'p', 0, G_OPTION_ARG_STRING, &password, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
50 |
"Password to try", NULL }, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
51 |
{ "resource", 'r', 0, G_OPTION_ARG_STRING, &resource, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
52 |
"Resource connect with [default=test-lm]", NULL }, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
53 |
{ "fingerprint", 'f', 0, G_OPTION_ARG_STRING, &fingerprint, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
54 |
"SSL Fingerprint to use", NULL }, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
55 |
{ NULL } |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
56 |
}; |
83 | 57 |
|
167 | 58 |
static gchar * |
59 |
get_part_name (const gchar *username) |
|
60 |
{ |
|
61 |
const gchar *ch; |
|
62 |
||
63 |
g_return_val_if_fail (username != NULL, NULL); |
|
64 |
||
65 |
ch = strchr (username, '@'); |
|
66 |
if (!ch) { |
|
67 |
return NULL; |
|
68 |
} |
|
69 |
||
70 |
return g_strndup (username, ch - username); |
|
71 |
} |
|
72 |
||
83 | 73 |
static void |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
74 |
print_finger (const char *fpr, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
75 |
unsigned int size) |
83 | 76 |
{ |
77 |
gint i; |
|
121
612603ba6d90
2005-05-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
99
diff
changeset
|
78 |
for (i = 0; i < size-1; i++) { |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
79 |
g_printerr ("%02X:", fpr[i]); |
121
612603ba6d90
2005-05-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
99
diff
changeset
|
80 |
} |
612603ba6d90
2005-05-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
99
diff
changeset
|
81 |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
82 |
g_printerr ("%02X", fpr[size-1]); |
83 | 83 |
} |
84 |
||
85 |
static LmSSLResponse |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
86 |
ssl_cb (LmSSL *ssl, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
87 |
LmSSLStatus status, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
88 |
gpointer ud) |
83 | 89 |
{ |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
90 |
g_print ("TestLM: SSL status:%d\n", status); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
91 |
|
83 | 92 |
switch (status) { |
93 |
case LM_SSL_STATUS_NO_CERT_FOUND: |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
94 |
g_printerr ("TestLM: No certificate found!\n"); |
83 | 95 |
break; |
96 |
case LM_SSL_STATUS_UNTRUSTED_CERT: |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
97 |
g_printerr ("TestLM: Certificate is not trusted!\n"); |
83 | 98 |
break; |
99 |
case LM_SSL_STATUS_CERT_EXPIRED: |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
100 |
g_printerr ("TestLM: Certificate has expired!\n"); |
83 | 101 |
break; |
102 |
case LM_SSL_STATUS_CERT_NOT_ACTIVATED: |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
103 |
g_printerr ("TestLM: Certificate has not been activated!\n"); |
83 | 104 |
break; |
105 |
case LM_SSL_STATUS_CERT_HOSTNAME_MISMATCH: |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
106 |
g_printerr ("TestLM: Certificate hostname does not match expected hostname!\n"); |
83 | 107 |
break; |
108 |
case LM_SSL_STATUS_CERT_FINGERPRINT_MISMATCH: { |
|
121
612603ba6d90
2005-05-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
99
diff
changeset
|
109 |
const char *fpr = lm_ssl_get_fingerprint (ssl); |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
110 |
g_printerr ("TestLM: Certificate fingerprint does not match expected fingerprint!\n"); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
111 |
g_printerr ("TestLM: Remote fingerprint: "); |
83 | 112 |
print_finger (fpr, 16); |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
113 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
114 |
g_printerr ("\n" |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
115 |
"TestLM: Expected fingerprint: "); |
83 | 116 |
print_finger (expected_fingerprint, 16); |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
117 |
g_printerr ("\n"); |
83 | 118 |
break; |
119 |
} |
|
120 |
case LM_SSL_STATUS_GENERIC_ERROR: |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
121 |
g_printerr ("TestLM: Generic SSL error!\n"); |
83 | 122 |
break; |
123 |
} |
|
124 |
||
125 |
return LM_SSL_RESPONSE_CONTINUE; |
|
126 |
} |
|
127 |
||
128 |
static void |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
129 |
connection_auth_cb (LmConnection *connection, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
130 |
gboolean success, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
131 |
gpointer user_data) |
83 | 132 |
{ |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
133 |
if (success) { |
83 | 134 |
LmMessage *m; |
135 |
||
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
136 |
test_success = TRUE; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
137 |
g_print ("TestLM: Authenticated successfully\n"); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
138 |
|
83 | 139 |
m = lm_message_new_with_sub_type (NULL, |
140 |
LM_MESSAGE_TYPE_PRESENCE, |
|
141 |
LM_MESSAGE_SUB_TYPE_AVAILABLE); |
|
142 |
lm_connection_send (connection, m, NULL); |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
143 |
g_print ("TestLM: Sent presence message:'%s'\n", |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
144 |
lm_message_node_to_string (m->node)); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
145 |
|
83 | 146 |
lm_message_unref (m); |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
147 |
} else { |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
148 |
g_printerr ("TestLM: Failed to authenticate\n"); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
149 |
g_main_loop_quit (main_loop); |
83 | 150 |
} |
151 |
} |
|
152 |
||
153 |
static void |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
154 |
connection_open_cb (LmConnection *connection, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
155 |
gboolean success, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
156 |
gpointer user_data) |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
157 |
{ |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
158 |
if (success) { |
167 | 159 |
gchar *user; |
160 |
||
161 |
user = get_part_name (username); |
|
162 |
lm_connection_authenticate (connection, user, |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
163 |
password, resource, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
164 |
connection_auth_cb, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
165 |
NULL, FALSE, NULL); |
167 | 166 |
g_free (user); |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
167 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
168 |
g_print ("TestLM: Sent authentication message\n"); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
169 |
} else { |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
170 |
g_printerr ("TestLM: Failed to connect\n"); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
171 |
g_main_loop_quit (main_loop); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
172 |
} |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
173 |
} |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
174 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
175 |
static void |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
176 |
connection_close_cb (LmConnection *connection, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
177 |
LmDisconnectReason reason, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
178 |
gpointer user_data) |
83 | 179 |
{ |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
180 |
const char *str; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
181 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
182 |
switch (reason) { |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
183 |
case LM_DISCONNECT_REASON_OK: |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
184 |
str = "LM_DISCONNECT_REASON_OK"; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
185 |
break; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
186 |
case LM_DISCONNECT_REASON_PING_TIME_OUT: |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
187 |
str = "LM_DISCONNECT_REASON_PING_TIME_OUT"; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
188 |
break; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
189 |
case LM_DISCONNECT_REASON_HUP: |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
190 |
str = "LM_DISCONNECT_REASON_HUP"; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
191 |
break; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
192 |
case LM_DISCONNECT_REASON_ERROR: |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
193 |
str = "LM_DISCONNECT_REASON_ERROR"; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
194 |
break; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
195 |
case LM_DISCONNECT_REASON_UNKNOWN: |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
196 |
default: |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
197 |
str = "LM_DISCONNECT_REASON_UNKNOWN"; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
198 |
break; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
199 |
} |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
200 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
201 |
g_print ("TestLM: Disconnected, reason:%d->'%s'\n", reason, str); |
83 | 202 |
} |
203 |
||
204 |
static LmHandlerResult |
|
205 |
handle_messages (LmMessageHandler *handler, |
|
206 |
LmConnection *connection, |
|
207 |
LmMessage *m, |
|
208 |
gpointer user_data) |
|
209 |
{ |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
210 |
g_print ("TestLM: Incoming message from: %s\n", |
83 | 211 |
lm_message_node_get_attribute (m->node, "from")); |
212 |
||
213 |
return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
|
214 |
} |
|
215 |
||
216 |
int |
|
217 |
main (int argc, char **argv) |
|
218 |
{ |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
219 |
GOptionContext *context; |
83 | 220 |
LmConnection *connection; |
221 |
LmMessageHandler *handler; |
|
222 |
gboolean result; |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
223 |
GError *error = NULL; |
83 | 224 |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
225 |
context = g_option_context_new ("- test Loudmouth"); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
226 |
g_option_context_add_main_entries (context, entries, NULL); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
227 |
g_option_context_parse (context, &argc, &argv, NULL); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
228 |
g_option_context_free (context); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
229 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
230 |
if (!server || !username || !password) { |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
231 |
g_printerr ("For usage, try %s --help\n", argv[0]); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
232 |
return EXIT_FAILURE; |
83 | 233 |
} |
234 |
||
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
235 |
if (fingerprint && !lm_ssl_is_supported ()) { |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
236 |
g_printerr ("TestLM: SSL is not supported in this build\n"); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
237 |
return EXIT_FAILURE; |
83 | 238 |
} |
239 |
||
167 | 240 |
if (username && strchr (username, '@') == NULL) { |
241 |
g_printerr ("TestLM: Username must have an '@' included\n"); |
|
242 |
return EXIT_FAILURE; |
|
243 |
} |
|
244 |
||
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
245 |
connection = lm_connection_new (server); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
246 |
lm_connection_set_port (connection, port); |
167 | 247 |
lm_connection_set_jid (connection, username); |
83 | 248 |
|
249 |
handler = lm_message_handler_new (handle_messages, NULL, NULL); |
|
250 |
lm_connection_register_message_handler (connection, handler, |
|
251 |
LM_MESSAGE_TYPE_MESSAGE, |
|
252 |
LM_HANDLER_PRIORITY_NORMAL); |
|
253 |
||
254 |
lm_message_handler_unref (handler); |
|
255 |
||
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
256 |
lm_connection_set_disconnect_function (connection, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
257 |
connection_close_cb, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
258 |
NULL, NULL); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
259 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
260 |
if (fingerprint) { |
83 | 261 |
LmSSL *ssl; |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
262 |
char *p; |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
263 |
int i; |
83 | 264 |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
265 |
if (port == LM_CONNECTION_DEFAULT_PORT) { |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
266 |
lm_connection_set_port (connection, |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
267 |
LM_CONNECTION_DEFAULT_PORT_SSL); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
268 |
} |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
269 |
|
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
270 |
for (i = 0, p = fingerprint; *p && *(p+1); i++, p += 3) { |
83 | 271 |
expected_fingerprint[i] = (unsigned char) g_ascii_strtoull (p, NULL, 16); |
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
272 |
} |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
273 |
|
83 | 274 |
ssl = lm_ssl_new (expected_fingerprint, |
275 |
(LmSSLFunction) ssl_cb, |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
276 |
NULL, NULL); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
277 |
|
83 | 278 |
lm_connection_set_ssl (connection, ssl); |
279 |
lm_ssl_unref (ssl); |
|
280 |
} |
|
281 |
||
282 |
result = lm_connection_open (connection, |
|
283 |
(LmResultFunction) connection_open_cb, |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
284 |
NULL, NULL, &error); |
83 | 285 |
|
286 |
if (!result) { |
|
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
287 |
g_printerr ("TestLM: Opening connection failed, error:%d->'%s'\n", |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
288 |
error->code, error->message); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
289 |
g_free (error); |
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
290 |
return EXIT_FAILURE; |
83 | 291 |
} |
292 |
||
293 |
main_loop = g_main_loop_new (NULL, FALSE); |
|
294 |
g_main_loop_run (main_loop); |
|
295 |
||
140
103227122f45
2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
121
diff
changeset
|
296 |
return (test_success ? EXIT_SUCCESS : EXIT_FAILURE); |
83 | 297 |
} |