File: message.c

package info (click to toggle)
libtlen 20041113-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, sarge
  • size: 832 kB
  • ctags: 1,514
  • sloc: ansic: 13,713; sh: 214; makefile: 156
file content (123 lines) | stat: -rw-r--r-- 2,543 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
 * Ostatnia aktualizacja:
 *
 * - $Id: message.c,v 1.20 2003/10/15 16:32:29 mati Exp $
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#include "libtlen.h"

/*
 * tlen_sendmsg()
 *
 * Wysya wiadomo
 *
 * - sesja - nasza sesja
 * - destination - osoba, do ktrej wysyamy wiadomo
 * - message - tre wiadomoci
 * - type - typ wiadomoci, TLEN_CHAT lub TLEN_MESSAGE
 *
 * Trzeba okreli w parametrze type rodzaj wysyanej wiadomoci 
 *
 */

int tlen_sendmsg(struct tlen_session *sesja, const char *destination, const char *message, int type)
{
	char *query;
	char *urlencoded;
	char *msgtype;

	urlencoded = tlen_encode(message);
	
	switch (type)
	{
	    case TLEN_MESSAGE:
		{
		    msgtype = "normal";
		    break;
		}
	    case TLEN_CHAT:
		{
		    msgtype = "chat";
		    break;
		}
	    default:
		{
		    msgtype = "chat";
		    break;
		}
	}
	
	tlen_debug ("To: %s\nMessage: %s\nTyp: %s\n", destination, message, msgtype);
	if (!(query = (char *) malloc (strlen ("<message to='' type=''><body></body></message>") + strlen (destination) + strlen (urlencoded) + strlen(msgtype)+1)))
	{
		perror ("malloc");
		sesja->error = TLEN_ERROR_MALLOC;
	}
	sprintf (query, "<message to='%s' type='%s'><body>%s</body></message>", destination, msgtype, urlencoded);
	tlen_socket_write_string (sesja, query);

	free (query);
	free (urlencoded);
	return 1;
}

/*
 * tlen_sendnotify()
 *
 * Wysya powiadomienie
 *
 * - sesja - nasza sesja
 * - destination - osoba, do ktrej wysyamy wiadomo
 * - type - typ powiadomienia, TLEN_NOTIFY_TYPING, TLEN_NOTIFY_NOTTYPING lub TLEN_NOTIFY_SOUNDALERT
 *
 * Trzeba okreli w parametrze type rodzaj wysyanego powiadomienia
 *
 */

int tlen_sendnotify(struct tlen_session *sesja, const char *destination, int type)
{
	char *query;
	char *notifytype;

	switch (type)
	{
	    case TLEN_NOTIFY_TYPING:
		{
		    notifytype = "t";
		    break;
		}
	    case TLEN_NOTIFY_NOTTYPING:
		{
		    notifytype = "u";
		    break;
		}
	    case TLEN_NOTIFY_SOUNDALERT:
		{
		    notifytype = "a";
		    break;
		}    
	    default:
		{
		    notifytype = "t"; // domyslnie TYPING
		    break;
		}
	}
	
	tlen_debug ("To: %s\nType: %s\n", destination, notifytype);
	if (!(query = (char *) malloc (strlen ("<m to='' tp=''/>") + strlen (destination) + strlen(notifytype)+1)))
	{
		perror ("malloc");
		sesja->error = TLEN_ERROR_MALLOC;
	}
	sprintf (query, "<m to='%s' tp='%s'/>", destination, notifytype);
	tlen_socket_write_string (sesja, query);

	free (query);
	return 1;
}