/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2001-2003, Ximian, Inc.
*/
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include <libsoup/soup.h>
#include <libsoup/soup-soap-message.h>
#include <libsoup/soup-soap-response.h>
SoupSession *session;
GMainLoop *loop;
static void
got_response (SoupMessage *msg, gpointer user_data)
{
SoupSoapResponse *response;
SoupSoapParameter *param, *subparam;
char *word, *dict, *def;
int count = 0;
if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
fprintf (stderr, "%d %s\n", msg->status_code, msg->reason_phrase);
exit (1);
}
response = soup_soap_message_parse_response (SOUP_SOAP_MESSAGE (msg));
if (!response) {
fprintf (stderr, "Could not parse SOAP response\n");
exit (1);
}
param = soup_soap_response_get_first_parameter_by_name (response, "DefineResult");
if (!param) {
fprintf (stderr, "Could not find result in SOAP response\n");
exit (1);
}
param = soup_soap_parameter_get_first_child_by_name (param, "Definitions");
if (!param)
goto done;
for (param = soup_soap_parameter_get_first_child_by_name (param, "Definition");
param;
param = soup_soap_parameter_get_next_child_by_name (param, "Definition")) {
subparam = soup_soap_parameter_get_first_child_by_name (param, "Word");
if (!subparam)
continue;
word = soup_soap_parameter_get_string_value (subparam);
subparam = soup_soap_parameter_get_first_child_by_name (param, "Dictionary");
if (subparam)
subparam = soup_soap_parameter_get_first_child_by_name (subparam, "Name");
if (subparam)
dict = soup_soap_parameter_get_string_value (subparam);
else
dict = NULL;
printf ("% 2d. %s (%s):\n", ++count, word, dict);
g_free (word);
g_free (dict);
subparam = soup_soap_parameter_get_first_child_by_name (param, "WordDefinition");
if (subparam) {
def = soup_soap_parameter_get_string_value (subparam);
printf ("%s\n", def);
g_free (def);
}
}
done:
if (count == 0)
printf ("No definition\n");
g_object_unref (response);
g_main_quit (loop);
}
static void
usage (void)
{
fprintf (stderr, "Usage: dict [-p proxy_uri] WORD\n");
exit (1);
}
int
main (int argc, char **argv)
{
SoupUri *proxy = NULL;
SoupSoapMessage *msg;
int opt;
g_type_init ();
g_thread_init (NULL);
while ((opt = getopt (argc, argv, "p:")) != -1) {
switch (opt) {
case 'p':
proxy = soup_uri_new (optarg);
if (!proxy) {
fprintf (stderr, "Could not parse %s as URI\n",
optarg);
exit (1);
}
break;
case '?':
usage ();
break;
}
}
argc -= optind;
argv += optind;
if (argc != 1)
usage ();
session = soup_session_async_new_with_options (
SOUP_SESSION_PROXY_URI, proxy,
NULL);
msg = soup_soap_message_new ("POST",
"http://services.aonaware.com/DictService/DictService.asmx",
FALSE, NULL, NULL, NULL);
if (!msg) {
fprintf (stderr, "Could not create web service request\n");
exit (1);
}
soup_message_add_header (SOUP_MESSAGE (msg)->request_headers,
"SOAPAction", "http://services.aonaware.com/webservices/Define");
soup_soap_message_start_envelope (msg);
soup_soap_message_start_body (msg);
soup_soap_message_start_element (msg, "Define", NULL,
"http://services.aonaware.com/webservices/");
soup_soap_message_add_namespace (msg, NULL, "http://services.aonaware.com/webservices/");
soup_soap_message_start_element (msg, "word", NULL, NULL);
soup_soap_message_write_string (msg, argv[0]);
soup_soap_message_end_element (msg);
soup_soap_message_end_element (msg);
soup_soap_message_end_body (msg);
soup_soap_message_end_envelope (msg);
soup_soap_message_persist (msg);
soup_session_queue_message (session, SOUP_MESSAGE (msg),
got_response, NULL);
loop = g_main_loop_new (NULL, TRUE);
g_main_run (loop);
g_main_loop_unref (loop);
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1