summaryrefslogtreecommitdiff
path: root/plugins/ExternalAPI/m_voice.h
blob: 5adf159f054c0b080c2f7331c2a148c926688ac2 (plain)
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/* 
Copyright (C) 2006 Ricardo Pescuma Domenecci

This is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this file; see the file license.txt.  If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  
*/


#ifndef __M_VOICE_H__
# define __M_VOICE_H__


#define EVENTTYPE_VOICE_CALL 8739


#define PROTOTYPE_VOICE (PROTOTYPE_ENCRYPTION-9)


#define VOICE_UNICODE	0x80000000

#ifdef UNICODE
# define VOICE_TCHAR VOICE_UNICODE
#else
# define VOICE_TCHAR 0
#endif

#define VOICE_STATE_TALKING 0
#define VOICE_STATE_RINGING 1
#define VOICE_STATE_CALLING 2
#define VOICE_STATE_ON_HOLD 3
#define VOICE_STATE_ENDED 4

typedef struct {
	int cbSize;				// Struct size
	const char *szModule;	// The name of the protocol module (used only in notifications)
	char *id;				// Protocol especific ID for this call
	int flags;				// Can be VOICE_CALL_CONTACT or VOICE_CALL_STRING (VOICE_UNICODE to say the string is unicode)
	union {					// Who to call
		MCONTACT hContact;
		TCHAR *ptszContact;
		char *pszContact;
		WCHAR *pwszContact;
	};
	int state;				// VOICE_STATE_*

} VOICE_CALL;


/*
Notifies that a voice call changed state

wParam: const VOICE_CALL *
lParam: ignored
return: 0 on success
*/
#define PE_VOICE_CALL_STATE				"/Voice/State"


#define VOICE_SUPPORTED					1	// Set if proto support voice calls. Probabilly will be 1 ;)
#define VOICE_CALL_CONTACT				2	// Set if a call can be made to a hContact
#define VOICE_CALL_CONTACT_NEED_TEST	4	// Set if the contact need to be tested with PS_VOICE_CALL_CONTACT_VALID (needs VOICE_CALL_CONTACT set to work)
#define VOICE_CALL_STRING				8	// Set if a call can be made to some string (PS_VOICE_CALL_STRING_VALID is used to validate the string)
#define VOICE_CAN_SET_DEVICE			16	// Set if the devices to mic in and sound out can be set (or the protocol will handle it internally)
#define VOICE_CAN_HOLD					32	// Set if a call can be put on hold
/*
Get protocol voice support flags

wParam: ignored
lParam: ignored
return: 0 on success
*/
#define PS_VOICE_GETINFO				"/Voice/GetInfo"

/*
Request to the protocol a voice call to hContact.

wParam: (HANDLE) hContact
lParam: ignored
return: 0 on success
*/
#define PS_VOICE_CALL				"/Voice/Call"

/*
Service called to make the protocol answer a call.
It is an async call. If the call was answered, the PE_VOICE_STARTEDCALL
notification will be fired.

wParam: (const char *) id
lParam: ignored
return: 0 on success
*/
#define PS_VOICE_ANSWERCALL				"/Voice/AnswerCall"

/*
Service called to make the protocol answer a call. This can be called if the 
call is ringing or has started. If called any other time it should be ignored.
It is an async call. If the call was droped, the PE_VOICE_ENDEDCALL
notification will be fired.

wParam: (const char *) id
lParam: ignored
return: 0 on success
*/
#define PS_VOICE_DROPCALL				"/Voice/DropCall"

/*
Service called to make the protocol hold a call. This means that the call should not
be droped, but it should be muted and put in a hold, to allow other call to be answered.
If the protocol can't hold a cal, it should be droped.

This can be called if the call has started. If called any other time it should be ignored.
It is an async call. If the call was droped, the PE_VOICE_HOLDEDCALL
notification will be fired.

wParam: (const char *) id
lParam: ignored
return: 0 on success
*/
#define PS_VOICE_HOLDCALL				"/Voice/HoldCall"

/*
Used if protocol support VOICE_CALL_STRING. The call string is passed as
wParam and the proto should validate it. 

wParam: (const TCHAR *) call string
lParam: ignored
return: 0 if wrong, 1 if correct
*/
#define PS_VOICE_CALL_STRING_VALID		"/Voice/CallStringValid"

/*
Used if protocol support VOICE_CALL_CONTACT and VOICE_CALL_CONTACT_NEED_TEST. 
The hContact is passed as wParam and the proto should tell if this contact can be 
called. 

wParam: (HANDLE) hContact
lParam: (BOOL) TRUE if it is a test for 'can call now?', FALSE if is a test for 'will be possible to call someday?'
return: 0 if can't be called, 1 if can
*/
#define PS_VOICE_CALL_CONTACT_VALID		"/Voice/CallContactValid"





#endif // __M_VOICE_H__