examples/test-lm.c
author hallski <hallski>
Wed, 19 Apr 2006 11:42:53 +0000
changeset 140 103227122f45
parent 121 612603ba6d90
child 167 7bcccfa734e2
permissions -rw-r--r--
2006-04-19 Mikael Hallendal <micke@imendio.com> * Landing a patch by Martyn Russell for Win32. * configure.ac: Updated for Win32 work * examples/*: Updated and improved. * loudmouth/Makefile.am: * loudmouth/lm-connection.c: - Abstracted out the low level socket handling to lm-sock.[ch] to make this file clean from OS dependant socket code. * loudmouth/lm-internals.h: * loudmouth/lm-parser.c: * loudmouth/lm-proxy.c: * loudmouth/lm-sha.c: * loudmouth/lm-utils.c: - Win32 work * loudmouth/lm-sock.[ch]: - Network abstraction layer.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
     1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
     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
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
     4
 *
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
     6
 * modify it under the terms of the GNU Lesser General Public License as
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
     7
 * published by the Free Software Foundation; either version 2 of the
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
     8
 * License, or (at your option) any later version.
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
     9
 *
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    13
 * Lesser General Public License for more details.
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    14
 *
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    15
 * You should have received a copy of the GNU Lesser General Public
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    16
 * License along with this program; if not, write to the
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    17
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    18
 * Boston, MA 02111-1307, USA.
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    19
 */
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    20
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    21
#include <config.h>
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    22
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    23
#include <string.h>
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    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
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    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
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    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
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    40
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    41
static GOptionEntry entries[] = 
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    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
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    57
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    58
static void
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    59
print_finger (const char   *fpr,
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    60
	      unsigned int  size)
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    61
{
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    62
	gint i;
121
612603ba6d90 2005-05-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 99
diff changeset
    63
	for (i = 0; i < size-1; i++) {
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    64
		g_printerr ("%02X:", fpr[i]);
121
612603ba6d90 2005-05-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 99
diff changeset
    65
	}
612603ba6d90 2005-05-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 99
diff changeset
    66
	
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    67
	g_printerr ("%02X", fpr[size-1]);
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    68
}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    69
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    70
static LmSSLResponse
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    71
ssl_cb (LmSSL       *ssl, 
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    72
	LmSSLStatus  status, 
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    73
	gpointer     ud)
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    74
{
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    75
	g_print ("TestLM: SSL status:%d\n", status);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    76
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    77
	switch (status) {
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    78
	case LM_SSL_STATUS_NO_CERT_FOUND:
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    79
		g_printerr ("TestLM: No certificate found!\n");
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    80
		break;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    81
	case LM_SSL_STATUS_UNTRUSTED_CERT:
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    82
		g_printerr ("TestLM: Certificate is not trusted!\n"); 
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    83
		break;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    84
	case LM_SSL_STATUS_CERT_EXPIRED:
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    85
		g_printerr ("TestLM: Certificate has expired!\n"); 
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    86
		break;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    87
	case LM_SSL_STATUS_CERT_NOT_ACTIVATED:
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    88
		g_printerr ("TestLM: Certificate has not been activated!\n"); 
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    89
		break;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    90
	case LM_SSL_STATUS_CERT_HOSTNAME_MISMATCH:
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    91
		g_printerr ("TestLM: Certificate hostname does not match expected hostname!\n"); 
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    92
		break;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    93
	case LM_SSL_STATUS_CERT_FINGERPRINT_MISMATCH: {
121
612603ba6d90 2005-05-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 99
diff changeset
    94
		const char *fpr = lm_ssl_get_fingerprint (ssl);
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    95
		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
    96
		g_printerr ("TestLM: Remote fingerprint: ");
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
    97
		print_finger (fpr, 16);
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    98
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
    99
		g_printerr ("\n"
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   100
			    "TestLM: Expected fingerprint: ");
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   101
		print_finger (expected_fingerprint, 16);
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   102
		g_printerr ("\n");
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   103
		break;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   104
	}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   105
	case LM_SSL_STATUS_GENERIC_ERROR:
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   106
		g_printerr ("TestLM: Generic SSL error!\n"); 
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   107
		break;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   108
	}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   109
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   110
	return LM_SSL_RESPONSE_CONTINUE;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   111
}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   112
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   113
static void
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   114
connection_auth_cb (LmConnection *connection,
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   115
		    gboolean      success, 
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   116
		    gpointer      user_data)
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   117
{
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   118
	if (success) {
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   119
		LmMessage *m;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   120
		
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   121
		test_success = TRUE;
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   122
		g_print ("TestLM: Authenticated successfully\n");
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   123
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   124
		m = lm_message_new_with_sub_type (NULL,
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   125
						  LM_MESSAGE_TYPE_PRESENCE,
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   126
						  LM_MESSAGE_SUB_TYPE_AVAILABLE);
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   127
		lm_connection_send (connection, m, NULL);
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   128
		g_print ("TestLM: Sent presence message:'%s'\n", 
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   129
			 lm_message_node_to_string (m->node));
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   130
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   131
		lm_message_unref (m);
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   132
	} else {
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   133
		g_printerr ("TestLM: Failed to authenticate\n");
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   134
		g_main_loop_quit (main_loop);
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   135
	}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   136
}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   137
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   138
static void
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   139
connection_open_cb (LmConnection *connection, 
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   140
		    gboolean      success,
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   141
		    gpointer      user_data)
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   142
{
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   143
	if (success) {
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   144
		lm_connection_authenticate (connection, username, 
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   145
					    password, resource,
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   146
					    connection_auth_cb, 
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   147
					    NULL, FALSE,  NULL);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   148
		
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   149
		g_print ("TestLM: Sent authentication message\n");
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   150
	} else {
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   151
		g_printerr ("TestLM: Failed to connect\n");
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   152
		g_main_loop_quit (main_loop);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   153
	}
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   154
}
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   155
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   156
static void
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   157
connection_close_cb (LmConnection       *connection, 
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   158
		     LmDisconnectReason  reason,
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   159
		     gpointer            user_data)
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   160
{
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   161
	const char *str;
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   162
	
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   163
	switch (reason) {
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   164
	case LM_DISCONNECT_REASON_OK:
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   165
		str = "LM_DISCONNECT_REASON_OK";
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   166
		break;
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   167
	case LM_DISCONNECT_REASON_PING_TIME_OUT:
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   168
		str = "LM_DISCONNECT_REASON_PING_TIME_OUT";
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   169
		break;
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   170
	case LM_DISCONNECT_REASON_HUP:
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   171
		str = "LM_DISCONNECT_REASON_HUP";
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   172
		break;
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   173
	case LM_DISCONNECT_REASON_ERROR:
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   174
		str = "LM_DISCONNECT_REASON_ERROR";
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   175
		break;
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   176
	case LM_DISCONNECT_REASON_UNKNOWN:
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   177
	default:
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   178
		str = "LM_DISCONNECT_REASON_UNKNOWN";
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   179
		break;
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   180
	}
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
	g_print ("TestLM: Disconnected, reason:%d->'%s'\n", reason, str);
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   183
}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   184
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   185
static LmHandlerResult
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   186
handle_messages (LmMessageHandler *handler,
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   187
		 LmConnection     *connection,
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   188
		 LmMessage        *m,
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   189
		 gpointer          user_data)
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   190
{
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   191
	g_print ("TestLM: Incoming message from: %s\n",
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   192
		 lm_message_node_get_attribute (m->node, "from"));
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   193
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   194
	return LM_HANDLER_RESULT_REMOVE_MESSAGE;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   195
}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   196
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   197
int 
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   198
main (int argc, char **argv)
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   199
{
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   200
	GOptionContext   *context;
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   201
	LmConnection     *connection;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   202
	LmMessageHandler *handler;
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   203
	gboolean          result;
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   204
	GError           *error = NULL;
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   205
	
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   206
	context = g_option_context_new ("- test Loudmouth");
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   207
	g_option_context_add_main_entries (context, entries, NULL);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   208
	g_option_context_parse (context, &argc, &argv, NULL);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   209
	g_option_context_free (context);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   210
	
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   211
	if (!server || !username || !password) {
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   212
		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
   213
		return EXIT_FAILURE;
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   214
	}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   215
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   216
	if (fingerprint && !lm_ssl_is_supported ()) {
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   217
		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
   218
		return EXIT_FAILURE;
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   219
	}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   220
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   221
        connection = lm_connection_new (server);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   222
	lm_connection_set_port (connection, port);
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   223
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   224
	handler = lm_message_handler_new (handle_messages, NULL, NULL);
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   225
	lm_connection_register_message_handler (connection, handler, 
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   226
						LM_MESSAGE_TYPE_MESSAGE, 
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   227
						LM_HANDLER_PRIORITY_NORMAL);
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   228
	
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   229
	lm_message_handler_unref (handler);
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   230
	
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   231
	lm_connection_set_disconnect_function (connection,
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   232
					       connection_close_cb,
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   233
					       NULL, NULL);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   234
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   235
	if (fingerprint) {
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   236
		LmSSL *ssl;
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   237
		char  *p;
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   238
		int    i;
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   239
		
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   240
		if (port == LM_CONNECTION_DEFAULT_PORT) {
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   241
			lm_connection_set_port (connection,
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   242
						LM_CONNECTION_DEFAULT_PORT_SSL);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   243
		}
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   244
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   245
		for (i = 0, p = fingerprint; *p && *(p+1); i++, p += 3) {
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   246
			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
   247
		}
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   248
	
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   249
		ssl = lm_ssl_new (expected_fingerprint,
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   250
				  (LmSSLFunction) ssl_cb,
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   251
				  NULL, NULL);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   252
	
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   253
		lm_connection_set_ssl (connection, ssl);
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   254
		lm_ssl_unref (ssl);
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   255
	}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   256
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   257
	result = lm_connection_open (connection,
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   258
				     (LmResultFunction) connection_open_cb,
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   259
				     NULL, NULL, &error);
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   260
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   261
	if (!result) {
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   262
		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
   263
			 error->code, error->message);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   264
		g_free (error);
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   265
		return EXIT_FAILURE;
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   266
	}
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   267
	
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   268
	main_loop = g_main_loop_new (NULL, FALSE);
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   269
	g_main_loop_run (main_loop);
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   270
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 121
diff changeset
   271
	return (test_success ? EXIT_SUCCESS : EXIT_FAILURE);
83
9c89653e79a1 added files
hallski <hallski>
parents:
diff changeset
   272
}