chenqiyang
2021-08-20 7b95fb4d4549d3452ee17165236186afc1f2b393
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
/*
 * Copyright (c) 2010-2019 Belledonne Communications SARL.
 *
 * This file is part of Liblinphone.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
 
#ifndef LINPHONE_TYPES_H_
#define LINPHONE_TYPES_H_
 
 
#include "ortp/payloadtype.h"
#include "mediastreamer2/msinterfaces.h"
#include "mediastreamer2/msvideo.h"
#include "linphone/defs.h"
 
// For migration purpose.
#include "linphone/api/c-types.h"
 
/**
 * The #LinphoneAccountCreator object used to configure an account on a server via XML-RPC.
 * @ingroup account_creator
**/
typedef struct _LinphoneAccountCreator LinphoneAccountCreator;
 
/**
 * An object to define a #LinphoneAccountCreator service.
 * @ingroup account_creator
 * @donotwrap
**/
typedef struct _LinphoneAccountCreatorService LinphoneAccountCreatorService;
 
/**
 * An object to handle the responses callbacks for handling the #LinphoneAccountCreator operations.
 * @ingroup account_creator
**/
typedef struct _LinphoneAccountCreatorCbs LinphoneAccountCreatorCbs;
 
/**
 * Enum describing Phone number checking.
 * @ingroup account_creator
**/
typedef enum _LinphoneAccountCreatorPhoneNumberStatus {
    LinphoneAccountCreatorPhoneNumberStatusOk = 0x1, /**< Phone number ok */
    LinphoneAccountCreatorPhoneNumberStatusTooShort = 0x2, /**< Phone number too short */
    LinphoneAccountCreatorPhoneNumberStatusTooLong = 0x4, /**< Phone number too long */
    LinphoneAccountCreatorPhoneNumberStatusInvalidCountryCode = 0x8, /**< Country code invalid */
    LinphoneAccountCreatorPhoneNumberStatusInvalid = 0x10 /**< Phone number invalid */
} LinphoneAccountCreatorPhoneNumberStatus;
 
/**
 * A mask of #LinphoneAccountCreatorPhoneNumberStatus values
 * @ingroup account_creator
 */
typedef unsigned int LinphoneAccountCreatorPhoneNumberStatusMask;
 
/**
 * Enum describing Username checking.
 * @ingroup account_creator
**/
typedef enum _LinphoneAccountCreatorUsernameStatus {
    LinphoneAccountCreatorUsernameStatusOk, /**< Username ok */
    LinphoneAccountCreatorUsernameStatusTooShort, /**< Username too short */
    LinphoneAccountCreatorUsernameStatusTooLong,  /**< Username too long */
    LinphoneAccountCreatorUsernameStatusInvalidCharacters, /**< Contain invalid characters */
    LinphoneAccountCreatorUsernameStatusInvalid /**< Invalid username */
} LinphoneAccountCreatorUsernameStatus;
 
/**
 * Enum describing Email checking.
 * @ingroup account_creator
**/
typedef enum _LinphoneAccountCreatorEmailStatus {
    LinphoneAccountCreatorEmailStatusOk, /**< Email ok */
    LinphoneAccountCreatorEmailStatusMalformed, /**< Email malformed */
    LinphoneAccountCreatorEmailStatusInvalidCharacters /**< Contain invalid characters */
} LinphoneAccountCreatorEmailStatus;
 
/**
 * Enum describing Password checking.
 * @ingroup account_creator
**/
typedef enum _LinphoneAccountCreatorPasswordStatus {
    LinphoneAccountCreatorPasswordStatusOk, /**< Password ok */
    LinphoneAccountCreatorPasswordStatusTooShort, /**< Password too short */
    LinphoneAccountCreatorPasswordStatusTooLong,  /**< Password too long */
    LinphoneAccountCreatorPasswordStatusInvalidCharacters, /**< Contain invalid characters */
    LinphoneAccountCreatorPasswordStatusMissingCharacters /**< Missing specific characters */
} LinphoneAccountCreatorPasswordStatus;
 
/**
 * Enum describing language checking.
 * @ingroup account_creator
**/
typedef enum _LinphoneAccountCreatorLanguageStatus {
    LinphoneAccountCreatorLanguageStatusOk /**< Language ok */
} LinphoneAccountCreatorLanguageStatus;
 
 
/**
 * Enum algorithm checking.
 * @ingroup account_creator
 **/
typedef enum _LinphoneAccountCreatorAlgoStatus {
    LinphoneAccountCreatorAlgoStatusOk, /**< Algorithm ok */
    LinphoneAccountCreatorAlgoStatusNotSupported /**< Algorithm not supported */
} LinphoneAccountCreatorAlgoStatus;
 
/**
 * Enum describing Activation code checking.
 * @ingroup account_creator
**/
typedef enum _LinphoneAccountCreatorActivationCodeStatus {
    LinphoneAccountCreatorActivationCodeStatusOk, /**< Activation code ok */
    LinphoneAccountCreatorActivationCodeStatusTooShort, /**< Activation code too short */
    LinphoneAccountCreatorActivationCodeStatusTooLong, /**< Activation code too long */
    LinphoneAccountCreatorActivationCodeStatusInvalidCharacters /**< Contain invalid characters */
} LinphoneAccountCreatorActivationCodeStatus;
 
/**
 * Enum describing Domain checking
 * @ingroup account_creator
**/
typedef enum _LinphoneAccountCreatorDomainStatus {
    LinphoneAccountCreatorDomainOk, /**< Domain ok */
    LinphoneAccountCreatorDomainInvalid /**< Domain invalid */
} LinphoneAccountCreatorDomainStatus;
 
/**
 * Enum describing Transport checking
 * @ingroup account_creator
**/
typedef enum _LinphoneAccountCreatorTransportStatus {
    LinphoneAccountCreatorTransportOk, /**< Transport ok */
    LinphoneAccountCreatorTransportUnsupported /**< Transport invalid */
} LinphoneAccountCreatorTransportStatus;
 
/**
 * Enum describing the status of server request.
 * @ingroup account_creator_request
**/
typedef enum _LinphoneAccountCreatorStatus {
    /** Request status **/
    LinphoneAccountCreatorStatusRequestOk, /**< Request passed */
    LinphoneAccountCreatorStatusRequestFailed, /**< Request failed */
    LinphoneAccountCreatorStatusMissingArguments, /**< Request failed due to missing argument(s) */
    LinphoneAccountCreatorStatusMissingCallbacks, /**< Request failed due to missing callback(s) */
 
    /** Account status **/
    /* Creation */
    LinphoneAccountCreatorStatusAccountCreated, /**< Account created */
    LinphoneAccountCreatorStatusAccountNotCreated, /**< Account not created */
    /* Existence */
    LinphoneAccountCreatorStatusAccountExist, /**< Account exist */
    LinphoneAccountCreatorStatusAccountExistWithAlias, /**< Account exist with alias */
    LinphoneAccountCreatorStatusAccountNotExist, /**< Account not exist */
    LinphoneAccountCreatorStatusAliasIsAccount, /**< Account was created with Alias */
    LinphoneAccountCreatorStatusAliasExist, /**< Alias exist */
    LinphoneAccountCreatorStatusAliasNotExist, /**< Alias not exist */
    /* Activation */
    LinphoneAccountCreatorStatusAccountActivated, /**< Account activated */
    LinphoneAccountCreatorStatusAccountAlreadyActivated, /**< Account already activated */
    LinphoneAccountCreatorStatusAccountNotActivated, /**< Account not activated */
    /* Linking */
    LinphoneAccountCreatorStatusAccountLinked, /**< Account linked */
    LinphoneAccountCreatorStatusAccountNotLinked, /**< Account not linked */
 
    /** Server **/
    LinphoneAccountCreatorStatusServerError, /**< Error server */
 
    LinphoneAccountCreatorStatusPhoneNumberInvalid, /**< Error cannot send SMS */
    LinphoneAccountCreatorStatusWrongActivationCode, /**< Error key doesn't match */
    LinphoneAccountCreatorStatusPhoneNumberOverused, /**< Error too many SMS sent */
    LinphoneAccountCreatorStatusAlgoNotSupported, /** < Error algo isn't MD5 or SHA-256 */
    LinphoneAccountCreatorStatusUnexpectedError, /** < Generic error */
} LinphoneAccountCreatorStatus;
 
/**
 * Enum describing Ip family.
 * @ingroup initializing
**/
typedef enum _LinphoneAddressFamily {
    LinphoneAddressFamilyInet, /**< IpV4 */
    LinphoneAddressFamilyInet6, /**< IpV6 */
    LinphoneAddressFamilyUnspec, /**< Unknown */
} LinphoneAddressFamily;
 
/**
 * Enum describing type of audio route.
 * @ingroup call_control
**/
typedef enum _LinphoneAudioRoute {
    LinphoneAudioRouteEarpiece,
    LinphoneAudioRouteSpeaker
} LinphoneAudioRoute;
 
/**
 * Object holding authentication information.
 *
 * @note The object's fields should not be accessed directly. Prefer using
 * the accessor methods.
 *
 * In most case, authentication information consists of a username and password.
 * Sometimes, a userid is required by proxy, and realm can be useful to discriminate
 * different SIP domains.
 *
 * Once created and filled, a #LinphoneAuthInfo must be added to the #LinphoneCore in
 * order to become known and used automatically when needed.
 * Use linphone_core_add_auth_info() for that purpose.
 *
 * The #LinphoneCore object can take the initiative to request authentication information
 * when needed to the application through the auth_info_requested callback of the
 * #LinphoneCoreVTable structure.
 *
 * The application can respond to this information request later using
 * linphone_core_add_auth_info(). This will unblock all pending authentication
 * transactions and retry them with authentication headers.
 *
 * @ingroup authentication
**/
typedef struct _LinphoneAuthInfo LinphoneAuthInfo;
 
/**
 * Enum describing the authentication methods
 * @ingroup network_parameters
**/
typedef enum _LinphoneAuthMethod {
    LinphoneAuthHttpDigest, /**< Digest authentication requested */
    LinphoneAuthTls, /**< Client certificate requested */
} LinphoneAuthMethod;
 
/**
 * Enum describing RTP AVPF activation modes.
 * @ingroup media_parameters
**/
typedef enum _LinphoneAVPFMode {
    LinphoneAVPFDefault = -1, /**< Use default value defined at upper level */
    LinphoneAVPFDisabled, /**< AVPF is disabled */
    LinphoneAVPFEnabled /**< AVPF is enabled */
} LinphoneAVPFMode;
 
/**
 * The #LinphoneContent object representing a data buffer.
 * @ingroup misc
**/
typedef struct _LinphoneBuffer LinphoneBuffer;
 
/**
 * Enum representing the direction of a call.
 * @ingroup call_logs
**/
typedef enum _LinphoneCallDir {
    LinphoneCallOutgoing, /**< outgoing calls*/
    LinphoneCallIncoming  /**< incoming calls*/
} LinphoneCallDir;
 
/**
 * Structure representing a call log.
 * @ingroup call_logs
**/
typedef struct _LinphoneCallLog LinphoneCallLog;
 
/**
 * The #LinphoneCallParams is an object containing various call related parameters.
 * It can be used to retrieve parameters from a currently running call or modify
 * the call's characteristics dynamically.
 * @ingroup call_control
**/
typedef struct _LinphoneCallParams LinphoneCallParams;
 
/**
 * The #LinphoneCallStats objects carries various statistic informations regarding quality of audio or video streams.
 *
 * To receive these informations periodically and as soon as they are computed, the application is invited to place a #LinphoneCoreCallStatsUpdatedCb callback in the #LinphoneCoreVTable structure
 * it passes for instanciating the #LinphoneCore object (see linphone_core_new() ).
 *
 * At any time, the application can access last computed statistics using linphone_call_get_audio_stats() or linphone_call_get_video_stats().
 * @ingroup call_misc
**/
typedef struct _LinphoneCallStats LinphoneCallStats;
 
/**
 * Enum representing the status of a call
 * @ingroup call_logs
**/
typedef enum _LinphoneCallStatus {
    LinphoneCallSuccess, /**< The call was sucessful */
    LinphoneCallAborted, /**< The call was aborted */
    LinphoneCallMissed, /**< The call was missed (unanswered) */
    LinphoneCallDeclined, /**< The call was declined, either locally or by remote end */
    LinphoneCallEarlyAborted, /**<The call was aborted before being advertised to the application - for protocol reasons*/
    LinphoneCallAcceptedElsewhere, /**<The call was answered on another device*/
    LinphoneCallDeclinedElsewhere /**<The call was declined on another device*/
} LinphoneCallStatus;
 
/**
 * #LinphoneConference class
 * The _LinphoneConference struct does not exists, it's the Conference C++ class that is used behind
 * @ingroup call_control
 */
typedef struct _LinphoneConference LinphoneConference;
 
/**
 * Parameters for initialization of conferences
 * The _LinphoneConferenceParams struct does not exists, it's the ConferenceParams C++ class that is used behind
 * @ingroup call_control
 */
typedef struct _LinphoneConferenceParams LinphoneConferenceParams;
 
/**
 * The #LinphoneConfig object is used to manipulate a configuration file.
 *
 * The format of the configuration file is a .ini like format:
 * - sections are defined in []
 * - each section contains a sequence of key=value pairs.
 *
 * Example:
 * @code
 * [sound]
 * echocanceler=1
 * playback_dev=ALSA: Default device
 *
 * [video]
 * enabled=1
 * @endcode
 *
 * @ingroup misc
**/
typedef struct _LpConfig LinphoneConfig;
 
/**
 * Define old struct name for backward compatibility
 */
#define LpConfig LinphoneConfig
 
/**
 * #LinphoneGlobalState describes the global state of the #LinphoneCore object.
 * It is notified via the LinphoneCoreVTable::global_state_changed
 * @ingroup initializing
**/
typedef enum _LinphoneConfiguringState {
    LinphoneConfiguringSuccessful,
    LinphoneConfiguringFailed,
    LinphoneConfiguringSkipped
} LinphoneConfiguringState;
 
/**
 * Consolidated presence information: 'online' means the user is open for communication,
 * 'busy' means the user is open for communication but involved in an other activity,
 * 'do not disturb' means the user is not open for communication, and 'offline' means
 * that no presence information is available.
 * @ingroup buddy_list
 */
typedef enum _LinphoneConsolidatedPresence {
    LinphoneConsolidatedPresenceOnline,
    LinphoneConsolidatedPresenceBusy,
    LinphoneConsolidatedPresenceDoNotDisturb,
    LinphoneConsolidatedPresenceOffline
} LinphoneConsolidatedPresence;
 
typedef struct _LinphoneContactProvider LinphoneContactProvider;
 
typedef struct _LinphoneContactSearch LinphoneContactSearch;
 
typedef unsigned int LinphoneContactSearchID;
 
/**
 * Old name of #LinphoneContactSearchID
 * @deprecated
 * @donotwrap
 */
LINPHONE_DEPRECATED typedef LinphoneContactSearchID ContactSearchID;
 
/**
 * Linphone core main object created by function linphone_core_new() .
 * @ingroup initializing
 */
typedef struct _LinphoneCore LinphoneCore;
 
/**
 * That class holds all the callbacks which are called by #LinphoneCore.
 *
 * Use linphone_factory_create_core_cbs() to create an instance. Then, call the
 * callback setters on the events you need to monitor and pass the object to
 * a #LinphoneCore instance through linphone_core_add_callbacks().
 *
 * That class is inherited from belle_sip_object_t.
 * @ingroup initializing
 */
typedef struct _LinphoneCoreCbs LinphoneCoreCbs;
 
typedef struct belle_sip_dict LinphoneDictionary;
 
/**
 * Enum describing the result of the echo canceller calibration process.
 * @ingroup media_parameters
**/
typedef enum _LinphoneEcCalibratorStatus {
    LinphoneEcCalibratorInProgress, /**< The echo canceller calibration process is on going */
    LinphoneEcCalibratorDone, /**< The echo canceller calibration has been performed and produced an echo delay measure */
    LinphoneEcCalibratorFailed, /**< The echo canceller calibration process has failed */
    LinphoneEcCalibratorDoneNoEcho /**< The echo canceller calibration has been performed and no echo has been detected */
} LinphoneEcCalibratorStatus;
 
/**
 * Object representing full details about a signaling error or status.
 * All #LinphoneErrorInfo object returned by the liblinphone API are readonly and transcients. For safety they must be used immediately
 * after obtaining them. Any other function call to the liblinphone may change their content or invalidate the pointer.
 * @ingroup misc
**/
typedef struct _LinphoneErrorInfo LinphoneErrorInfo;
 
/**
 * Object representing an event state, which is subcribed or published.
 * @see linphone_core_publish()
 * @see linphone_core_subscribe()
 * @ingroup event_api
**/
typedef struct _LinphoneEvent LinphoneEvent;
 
/**
 * An object to handle the callbacks for handling the LinphoneEvent operations.
 * @ingroup event_api
**/
typedef struct _LinphoneEventCbs LinphoneEventCbs;
 
/**
 * #LinphoneFactory is a singleton object devoted to the creation of all the object
 * of Liblinphone that cannot be created by #LinphoneCore itself.
 * @ingroup initializing
 */
typedef struct _LinphoneFactory LinphoneFactory;
 
/**
 * Policy to use to pass through firewalls.
 * @ingroup network_parameters
 * @deprecated Use #LinphoneNatPolicy instead.
 * @donotwrap
**/
typedef enum _LinphoneFirewallPolicy {
    LinphonePolicyNoFirewall, /**< Do not use any mechanism to pass through firewalls */
    LinphonePolicyUseNatAddress, /**< Use the specified public adress */
    LinphonePolicyUseStun, /**< Use a STUN server to get the public address */
    LinphonePolicyUseIce, /**< Use the ICE protocol */
    LinphonePolicyUseUpnp, /**< Use the uPnP protocol */
} LinphoneFirewallPolicy;
 
/**
 * Represents a buddy, all presence actions like subscription and status change notification are performed on this object
 * @ingroup buddy_list
 */
typedef struct _LinphoneFriend LinphoneFriend;
 
/**
* Enum describing the status of a LinphoneFriendList operation.
* @ingroup buddy_list
**/
typedef enum _LinphoneFriendCapability {
    LinphoneFriendCapabilityNone = 0,
    LinphoneFriendCapabilityGroupChat = 1 << 0,
    LinphoneFriendCapabilityLimeX3dh = 1 << 1,
    LinphoneFriendCapabilityEphemeralMessages = 1 << 2
} LinphoneFriendCapability;
 
/**
 * The #LinphoneFriendList object representing a list of friends.
 * @ingroup buddy_list
**/
typedef struct _LinphoneFriendList LinphoneFriendList;
 
/**
 * An object to handle the callbacks for #LinphoneFriend synchronization.
 * @ingroup buddy_list
**/
typedef struct _LinphoneFriendListCbs LinphoneFriendListCbs;
 
/**
* Enum describing the status of a LinphoneFriendList operation.
* @ingroup buddy_list
**/
typedef enum _LinphoneFriendListStatus {
    LinphoneFriendListOK,
    LinphoneFriendListNonExistentFriend,
    LinphoneFriendListInvalidFriend
} LinphoneFriendListStatus;
 
/**
 * Enum describing the status of a CardDAV synchronization
 * @ingroup buddy_list
 */
typedef enum _LinphoneFriendListSyncStatus {
    LinphoneFriendListSyncStarted,
    LinphoneFriendListSyncSuccessful,
    LinphoneFriendListSyncFailure
} LinphoneFriendListSyncStatus;
 
/**
 * #LinphoneGlobalState describes the global state of the #LinphoneCore object.
 * It is notified via the LinphoneCoreVTable::global_state_changed
 * @ingroup initializing
**/
typedef enum _LinphoneGlobalState {
    /** State in which we're in after linphone_core_stop(). Do not call any method while in this state except for linphone_core_start() */
    LinphoneGlobalOff,
    /** Transient state for when we call linphone_core_start() */
    LinphoneGlobalStartup,
    /** Indicates #LinphoneCore has been started and is up and running */
    LinphoneGlobalOn,
    /** Transient state for when we call linphone_core_stop() */
    LinphoneGlobalShutdown,
    /** Transient state between Startup and On if there is a remote provisionning URI configured */
    LinphoneGlobalConfiguring,
    /** #LinphoneCore state after being created by linphone_factory_create_core(), generally followed by a call to linphone_core_start() */
    LinphoneGlobalReady
} LinphoneGlobalState;
 
/**
 * Enum describing ICE states.
 * @ingroup initializing
**/
typedef enum _LinphoneIceState {
    LinphoneIceStateNotActivated, /**< ICE has not been activated for this call or stream*/
    LinphoneIceStateFailed, /**< ICE processing has failed */
    LinphoneIceStateInProgress, /**< ICE process is in progress */
    LinphoneIceStateHostConnection, /**< ICE has established a direct connection to the remote host */
    LinphoneIceStateReflexiveConnection, /**< ICE has established a connection to the remote host through one or several NATs */
    LinphoneIceStateRelayConnection /**< ICE has established a connection through a relay */
} LinphoneIceState;
 
/**
 * IM encryption engine.
 * @ingroup misc
 * @donotwrap
 */
typedef struct _LinphoneImEncryptionEngine LinphoneImEncryptionEngine;
 
/**
 * An object to handle the callbacks for the handling a #LinphoneImEncryptionEngine object.
 * @ingroup misc
 * @donotwrap
 */
typedef struct _LinphoneImEncryptionEngineCbs LinphoneImEncryptionEngineCbs;
 
/**
 * Policy to use to send/receive instant messaging composing/delivery/display notifications.
 * The sending of this information is done as in the RFCs 3994 (is_composing) and 5438 (imdn delivered/displayed).
 * @ingroup chatroom
 */
typedef struct _LinphoneImNotifPolicy LinphoneImNotifPolicy;
 
/**
 * The #LinphoneInfoMessage is an object representing an informational message sent or received by the core.
 * @ingroup misc
**/
typedef struct _LinphoneInfoMessage LinphoneInfoMessage;
 
typedef struct _LinphoneLDAPContactProvider LinphoneLDAPContactProvider;
 
typedef struct _LinphoneLDAPContactSearch LinphoneLDAPContactSearch;
 
/**
 * @ingroup network_parameters
 */
typedef enum _LinphoneLimeState {
    LinphoneLimeDisabled, /**< Lime is not used at all */
    LinphoneLimeMandatory, /**< Lime is always used */
    LinphoneLimePreferred, /**< Lime is used only if we already shared a secret with remote */
} LinphoneLimeState;
 
/**
 * Session Timers refresher
 * @ingroup initializing
 */
typedef enum _LinphoneSessionExpiresRefresher {
  LinphoneSessionExpiresRefresherUnspecified,
  LinphoneSessionExpiresRefresherUAS,
  LinphoneSessionExpiresRefresherUAC
} LinphoneSessionExpiresRefresher;
 
/**
 * @ingroup initializing
 */
typedef enum _LinphoneLogCollectionState {
    LinphoneLogCollectionDisabled,
    LinphoneLogCollectionEnabled,
    LinphoneLogCollectionEnabledWithoutPreviousLogHandler
} LinphoneLogCollectionState;
 
/**
 * #LinphoneCoreLogCollectionUploadState is used to notify if log collection upload have been succesfully delivered or not.
 * @ingroup initializing
 */
typedef enum _LinphoneCoreLogCollectionUploadState {
    LinphoneCoreLogCollectionUploadStateInProgress, /**< Delivery in progress */
    LinphoneCoreLogCollectionUploadStateDelivered, /**< Log collection upload successfully delivered and acknowledged by remote end point */
    LinphoneCoreLogCollectionUploadStateNotDelivered, /**< Log collection upload was not delivered */
} LinphoneCoreLogCollectionUploadState;
 
/**
 * Indicates for a given media the stream direction
 * @ingroup call_control
 */
typedef enum _LinphoneMediaDirection {
    LinphoneMediaDirectionInvalid = -1,
    LinphoneMediaDirectionInactive, /** No active media not supported yet*/
    LinphoneMediaDirectionSendOnly, /** Send only mode*/
    LinphoneMediaDirectionRecvOnly, /** recv only mode*/
    LinphoneMediaDirectionSendRecv, /** send receive*/
} LinphoneMediaDirection;
 
/**
 * Enum describing type of media encryption types.
 * @ingroup media_parameters
**/
typedef enum _LinphoneMediaEncryption {
    LinphoneMediaEncryptionNone, /**< No media encryption is used */
    LinphoneMediaEncryptionSRTP, /**< Use SRTP media encryption */
    LinphoneMediaEncryptionZRTP, /**< Use ZRTP media encryption */
    LinphoneMediaEncryptionDTLS /**< Use DTLS media encryption */
} LinphoneMediaEncryption;
 
/**
 * Enum describing the ZRTP SAS validation status of a peer URI
 * @ingroup media_parameters
**/
typedef enum _LinphoneZrtpPeerStatus {
    LinphoneZrtpPeerStatusUnknown, /**< Peer URI unkown or never validated/invalidated the SAS */
    LinphoneZrtpPeerStatusInvalid, /**< Peer URI SAS rejected in database */
    LinphoneZrtpPeerStatusValid /**< Peer URI SAS validated in database */
} LinphoneZrtpPeerStatus;
 
/**
 * Policy to use to pass through NATs/firewalls.
 * @ingroup network_parameters
 */
typedef struct _LinphoneNatPolicy LinphoneNatPolicy;
 
/**
 * Enum describing remote friend status
 * @deprecated Use #LinphonePresenceModel and #LinphonePresenceActivity instead
 * @donotwrap
 */
typedef enum _LinphoneOnlineStatus{
    LinphoneStatusOffline, /**< Offline */
    LinphoneStatusOnline, /**< Online */
    LinphoneStatusBusy, /**< Busy */
    LinphoneStatusBeRightBack, /**< Be right back */
    LinphoneStatusAway, /**< Away */
    LinphoneStatusOnThePhone, /** On the phone */
    LinphoneStatusOutToLunch, /**< Out to lunch */
    LinphoneStatusDoNotDisturb, /**< Do not disturb */
    LinphoneStatusMoved, /**< Moved in this sate, call can be redirected if an alternate contact address has been set using function linphone_core_set_presence_info() */
    LinphoneStatusAltService, /**< Using another messaging service */
    LinphoneStatusPending, /**< Pending */
    LinphoneStatusVacation, /**< Vacation */
 
    LinphoneStatusEnd
} LinphoneOnlineStatus;
 
/**
 * Player interface.
 * @ingroup call_control
**/
typedef struct _LinphonePlayer LinphonePlayer;
 
/**
 * An object to handle the callbacks for the handling a #LinphonePlayer objects.
 * @ingroup call_control
 */
typedef struct _LinphonePlayerCbs LinphonePlayerCbs;
 
/**
 * The state of a LinphonePlayer.
 * @ingroup call_control
 */
typedef enum LinphonePlayerState {
    LinphonePlayerClosed, /**< No file is opened for playing. */
    LinphonePlayerPaused, /**< The player is paused. */
    LinphonePlayerPlaying /**< The player is playing. */
} LinphonePlayerState;
 
/**
 * Presence activity type holding information about a presence activity.
 * @ingroup buddy_list
 */
typedef struct _LinphonePresenceActivity LinphonePresenceActivity;
 
/**
 * Activities as defined in section 3.2 of RFC 4480
 * @ingroup buddy_list
 */
typedef enum LinphonePresenceActivityType {
    /** The person has a calendar appointment, without specifying exactly of what type. This activity is
     *  indicated if more detailed information is not available or the person chooses not to reveal more
     * information. */
    LinphonePresenceActivityAppointment,
 
    /** The person is physically away from all interactive communication devices. */
    LinphonePresenceActivityAway,
 
    /** The person is eating the first meal of the day, usually eaten in the morning. */
    LinphonePresenceActivityBreakfast,
 
    /** The person is busy, without further details. */
    LinphonePresenceActivityBusy,
 
    /** The person is having his or her main meal of the day, eaten in the evening or at midday. */
    LinphonePresenceActivityDinner,
 
    /**  This is a scheduled national or local holiday. */
    LinphonePresenceActivityHoliday,
 
    /** The person is riding in a vehicle, such as a car, but not steering. */
    LinphonePresenceActivityInTransit,
 
    /** The person is looking for (paid) work. */
    LinphonePresenceActivityLookingForWork,
 
    /** The person is eating his or her midday meal. */
    LinphonePresenceActivityLunch,
 
    /** The person is scheduled for a meal, without specifying whether it is breakfast, lunch, or dinner,
     *  or some other meal. */
    LinphonePresenceActivityMeal,
 
    /** The person is in an assembly or gathering of people, as for a business, social, or religious purpose.
     *  A meeting is a sub-class of an appointment. */
    LinphonePresenceActivityMeeting,
 
    /** The person is talking on the telephone. */
    LinphonePresenceActivityOnThePhone,
 
    /** The person is engaged in an activity with no defined representation. A string describing the activity
     *  in plain text SHOULD be provided. */
    LinphonePresenceActivityOther,
 
    /** A performance is a sub-class of an appointment and includes musical, theatrical, and cinematic
     *  performances as well as lectures. It is distinguished from a meeting by the fact that the person
     *  may either be lecturing or be in the audience, with a potentially large number of other people,
     *  making interruptions particularly noticeable. */
    LinphonePresenceActivityPerformance,
 
    /** The person will not return for the foreseeable future, e.g., because it is no longer working for
     *  the company. */
    LinphonePresenceActivityPermanentAbsence,
 
    /** The person is occupying himself or herself in amusement, sport, or other recreation. */
    LinphonePresenceActivityPlaying,
 
    /** The person is giving a presentation, lecture, or participating in a formal round-table discussion. */
    LinphonePresenceActivityPresentation,
 
    /** The person is visiting stores in search of goods or services. */
    LinphonePresenceActivityShopping,
 
    /** The person is sleeping.*/
    LinphonePresenceActivitySleeping,
 
    /** The person is observing an event, such as a sports event. */
    LinphonePresenceActivitySpectator,
 
    /** The person is controlling a vehicle, watercraft, or plane. */
    LinphonePresenceActivitySteering,
 
    /** The person is on a business or personal trip, but not necessarily in-transit. */
    LinphonePresenceActivityTravel,
 
    /** The person is watching television. */
    LinphonePresenceActivityTV,
 
    /** The activity of the person is unknown. */
    LinphonePresenceActivityUnknown,
 
    /** A period of time devoted to pleasure, rest, or relaxation. */
    LinphonePresenceActivityVacation,
 
    /** The person is engaged in, typically paid, labor, as part of a profession or job. */
    LinphonePresenceActivityWorking,
 
    /** The person is participating in religious rites. */
    LinphonePresenceActivityWorship
} LinphonePresenceActivityType;
 
/**
 * Basic status as defined in section 4.1.4 of RFC 3863
 * @ingroup buddy_list
 */
typedef enum LinphonePresenceBasicStatus {
    /** This value means that the associated contact element, if any, is ready to accept communication. */
    LinphonePresenceBasicStatusOpen,
 
    /** This value means that the associated contact element, if any, is unable to accept communication. */
    LinphonePresenceBasicStatusClosed
} LinphonePresenceBasicStatus;
 
/**
 * Presence model type holding information about the presence of a person.
 * @ingroup buddy_list
 */
typedef struct _LinphonePresenceModel LinphonePresenceModel;
 
/**
 * Presence note type holding information about a presence note.
 * @ingroup buddy_list
 */
typedef struct _LinphonePresenceNote LinphonePresenceNote;
 
/**
 * Presence person holding information about a presence person.
 * @ingroup buddy_list
 */
typedef struct _LinphonePresencePerson LinphonePresencePerson;
 
/**
 * Presence service type holding information about a presence service.
 * @ingroup buddy_list
 */
typedef struct _LinphonePresenceService LinphonePresenceService;
 
/**
 * @ingroup call_control
 * Defines privacy policy to apply as described by rfc3323
**/
typedef enum _LinphonePrivacy {
    /**
     * Privacy services must not perform any privacy function
     */
    LinphonePrivacyNone = 0x0,
    /**
     * Request that privacy services provide a user-level privacy
     * function.
     * With this mode, "from" header is hidden, usually replaced by  From: "Anonymous" <sip:anonymous@anonymous.invalid>
     */
    LinphonePrivacyUser = 0x1,
    /**
     * Request that privacy services modify headers that cannot
     * be set arbitrarily by the user (Contact/Via).
     */
    LinphonePrivacyHeader = 0x2,
    /**
     *  Request that privacy services provide privacy for session
     * media
     */
    LinphonePrivacySession = 0x4,
    /**
     * rfc3325
     * The presence of this privacy type in
     * a Privacy header field indicates that the user would like the Network
     * Asserted Identity to be kept private with respect to SIP entities
     * outside the Trust Domain with which the user authenticated.  Note
     * that a user requesting multiple types of privacy MUST include all of
     * the requested privacy types in its Privacy header field value
     *
     */
    LinphonePrivacyId = 0x8,
    /**
     * Privacy service must perform the specified services or
     * fail the request
     *
     **/
    LinphonePrivacyCritical = 0x10,
 
    /**
     * Special keyword to use privacy as defined either globally or by proxy using linphone_proxy_config_set_privacy()
     */
    LinphonePrivacyDefault = 0x8000,
} LinphonePrivacy;
/* WARNING This enum MUST be kept in sync with the SalPrivacy enum from sal.h */
 
/**
 * A mask of #LinphonePrivacy values
 * @ingroup call_control
 */
typedef unsigned int LinphonePrivacyMask;
 
/**
 * The #LinphoneProxyConfig object represents a proxy configuration to be used
 * by the #LinphoneCore object.
 * Its fields must not be used directly in favour of the accessors methods.
 * Once created and filled properly the #LinphoneProxyConfig can be given to
 * #LinphoneCore with linphone_core_add_proxy_config().
 * This will automatically triggers the registration, if enabled.
 *
 * The proxy configuration are persistent to restarts because they are saved
 * in the configuration file. As a consequence, after linphone_core_new() there
 * might already be a list of configured proxy that can be examined with
 * linphone_core_get_proxy_config_list().
 *
 * The default proxy (see linphone_core_set_default_proxy() ) is the one of the list
 * that is used by default for calls.
 * @ingroup proxies
**/
typedef struct _LinphoneProxyConfig LinphoneProxyConfig;
 
/**
 * Enum for publish states.
 * @ingroup event_api
**/
typedef enum _LinphonePublishState{
    LinphonePublishNone, /**< Initial state, do not use */
    LinphonePublishProgress, /**< An outgoing publish was created and submitted */
    LinphonePublishOk, /**< Publish is accepted */
    LinphonePublishError, /**< Publish encoutered an error, linphone_event_get_reason() gives reason code */
    LinphonePublishExpiring, /**< Publish is about to expire, only sent if [sip]->refresh_generic_publish property is set to 0 */
    LinphonePublishCleared /**< Event has been un published */
} LinphonePublishState;
 
/**
 * Enum describing various failure reasons or contextual information for some events.
 * @see linphone_call_get_reason()
 * @see linphone_proxy_config_get_error()
 * @see linphone_error_info_get_reason()
 * @ingroup misc
**/
typedef enum _LinphoneReason{
    LinphoneReasonNone, /**< No reason has been set by the core */
    LinphoneReasonNoResponse, /**< No response received from remote */
    LinphoneReasonForbidden, /**< Authentication failed due to bad credentials or resource forbidden */
    LinphoneReasonDeclined, /**< The call has been declined */
    LinphoneReasonNotFound, /**< Destination of the call was not found */
    LinphoneReasonNotAnswered, /**< The call was not answered in time (request timeout) */
    LinphoneReasonBusy, /**< Phone line was busy */
    LinphoneReasonUnsupportedContent, /**< Unsupported content */
    LinphoneReasonIOError, /**< Transport error: connection failures, disconnections etc... */
    LinphoneReasonDoNotDisturb, /**< Do not disturb reason */
    LinphoneReasonUnauthorized, /**< Operation is unauthorized because missing credential */
    LinphoneReasonNotAcceptable, /**< Operation is rejected due to incompatible or unsupported media parameters */
    LinphoneReasonNoMatch, /**< Operation could not be executed by server or remote client because it didn't have any context for it */
    LinphoneReasonMovedPermanently, /**< Resource moved permanently */
    LinphoneReasonGone, /**< Resource no longer exists */
    LinphoneReasonTemporarilyUnavailable, /**< Temporarily unavailable */
    LinphoneReasonAddressIncomplete, /**< Address incomplete */
    LinphoneReasonNotImplemented, /**< Not implemented */
    LinphoneReasonBadGateway, /**< Bad gateway */
    LinphoneReasonSessionIntervalTooSmall, /**< The received request contains a Session-Expires header field with a duration below the minimum timer */
    LinphoneReasonServerTimeout, /**< Server timeout */
    LinphoneReasonUnknown /**< Unknown reason */
} LinphoneReason;
 
#define LinphoneReasonBadCredentials LinphoneReasonForbidden
 
/*for compatibility*/
#define LinphoneReasonMedia LinphoneReasonUnsupportedContent
 
/**
 * #LinphoneRegistrationState describes proxy registration states.
 * @ingroup proxies
**/
typedef enum _LinphoneRegistrationState {
    LinphoneRegistrationNone, /**< Initial state for registrations */
    LinphoneRegistrationProgress, /**< Registration is in progress */
    LinphoneRegistrationOk,    /**< Registration is successful */
    LinphoneRegistrationCleared, /**< Unregistration succeeded */
    LinphoneRegistrationFailed    /**< Registration failed */
} LinphoneRegistrationState;
 
typedef struct _LinphoneRingtonePlayer LinphoneRingtonePlayer;
 
/**
 * Linphone core SIP transport ports.
 * Special values #LC_SIP_TRANSPORT_RANDOM, #LC_SIP_TRANSPORT_RANDOM, #LC_SIP_TRANSPORT_DONTBIND can be used.
 * Use with #linphone_core_set_sip_transports
 * @deprecated
 * @donotwrap
 */
typedef struct _LinphoneSipTransports {
    int udp_port; /**< SIP/UDP port */
    int tcp_port; /**< SIP/TCP port */
    int dtls_port; /**< SIP/DTLS port */
    int tls_port; /**< SIP/TLS port */
} LinphoneSipTransports;
 
/**
 * Linphone core SIP transport ports.
 * Special values #LC_SIP_TRANSPORT_RANDOM, #LC_SIP_TRANSPORT_RANDOM, #LC_SIP_TRANSPORT_DONTBIND can be used.
 * Use with #linphone_core_set_sip_transports
 * @ingroup initializing
 */
typedef struct _LinphoneTransports LinphoneTransports;
 
/**
 * Old name of #LinphoneSipTransports
 * @deprecated
 * @donotwrap
 */
LINPHONE_DEPRECATED typedef struct _LinphoneSipTransports LCSipTransports;
 
typedef struct _LinphoneSoundDaemon LinphoneSoundDaemon;
 
/**
 * Enum describing the stream types.
 * @ingroup initializing
**/
typedef enum _LinphoneStreamType {
    LinphoneStreamTypeAudio,
    LinphoneStreamTypeVideo,
    LinphoneStreamTypeText,
    LinphoneStreamTypeUnknown /* WARNING: Make sure this value remains the last one in the list */
} LinphoneStreamType;
 
/**
 * Enum controlling behavior for incoming subscription request.
 * Use by linphone_friend_set_inc_subscribe_policy()
 * @ingroup buddy_list
 */
typedef enum _LinphoneSubscribePolicy {
    /**
     * Does not automatically accept an incoming subscription request.
     * This policy implies that a decision has to be taken for each incoming subscription request notified by callback LinphoneCoreVTable.new_subscription_requested
     */
    LinphoneSPWait,
    LinphoneSPDeny, /**< Rejects incoming subscription request */
    LinphoneSPAccept /**< Automatically accepts a subscription request */
} LinphoneSubscribePolicy;
 
/**
 * Enum for subscription direction (incoming or outgoing).
 * @ingroup event_api
**/
typedef enum _LinphoneSubscriptionDir{
    LinphoneSubscriptionIncoming, /**< Incoming subscription. */
    LinphoneSubscriptionOutgoing, /**< Outgoing subscription. */
    LinphoneSubscriptionInvalidDir /**< Invalid subscription direction. */
} LinphoneSubscriptionDir;
 
/**
 * Enum for subscription states.
 * #LinphoneSubscriptionTerminated and #LinphoneSubscriptionError are final states.
 * @ingroup event_api
**/
typedef enum _LinphoneSubscriptionState{
    LinphoneSubscriptionNone, /**< Initial state, should not be used */
    LinphoneSubscriptionOutgoingProgress, /**< An outgoing subcription was sent */
    LinphoneSubscriptionIncomingReceived, /**< An incoming subcription is received */
    LinphoneSubscriptionPending, /**< Subscription is pending, waiting for user approval */
    LinphoneSubscriptionActive, /**< Subscription is accepted */
    LinphoneSubscriptionTerminated, /**< Subscription is terminated normally */
    LinphoneSubscriptionError, /**< Subscription was terminated by an error, indicated by linphone_event_get_reason() */
    LinphoneSubscriptionExpiring, /**< Subscription is about to expire, only sent if [sip]->refresh_generic_subscribe property is set to 0 */
} LinphoneSubscriptionState;
 
/**
 * Enum listing frequent telephony tones.
 * @ingroup misc
**/
typedef enum _LinphoneToneID {
    LinphoneToneUndefined, /**< Not a tone */
    LinphoneToneBusy, /**< Busy tone */
    LinphoneToneCallWaiting, /** Call waiting tone */
    LinphoneToneCallOnHold, /** Call on hold tone */
    LinphoneToneCallLost /** Tone played when call is abruptly disconnected (media lost)*/
} LinphoneToneID;
 
/**
 * Enum describing transport type for LinphoneAddress.
 * @ingroup linphone_address
**/
typedef enum _LinphoneTransportType {
    LinphoneTransportUdp,
    LinphoneTransportTcp,
    LinphoneTransportTls,
    LinphoneTransportDtls
} LinphoneTransportType;
/* WARNING This enum MUST be kept in sync with the SalTransport enum from sal.h */
 
/**
 * Linphone tunnel object.
 * @ingroup tunnel
 */
typedef struct _LinphoneTunnel LinphoneTunnel;
 
/**
 * @brief Tunnel settings.
 * @ingroup tunnel
 */
typedef struct _LinphoneTunnelConfig LinphoneTunnelConfig;
 
/**
 * Enum describing the tunnel modes.
 * @ingroup tunnel
**/
typedef enum _LinphoneTunnelMode {
    LinphoneTunnelModeDisable, /**< The tunnel is disabled */
    LinphoneTunnelModeEnable, /**< The tunnel is enabled */
    LinphoneTunnelModeAuto /**< The tunnel is enabled automatically if it is required */
} LinphoneTunnelMode;
 
/**
 * Enum describing uPnP states.
 * @ingroup initializing
**/
typedef enum _LinphoneUpnpState {
    LinphoneUpnpStateIdle, /**< uPnP is not activate */
    LinphoneUpnpStatePending, /**< uPnP process is in progress */
    LinphoneUpnpStateAdding, /**< Internal use: Only used by port binding */
    LinphoneUpnpStateRemoving, /**< Internal use: Only used by port binding */
    LinphoneUpnpStateNotAvailable, /**< uPnP is not available */
    LinphoneUpnpStateOk, /**< uPnP is enabled */
    LinphoneUpnpStateKo, /**< uPnP processing has failed */
    LinphoneUpnpStateBlacklisted, /**< IGD router is blacklisted */
} LinphoneUpnpState;
 
/**
 * The #LinphoneVcard object.
 * @ingroup carddav_vcard
 */
typedef struct _LinphoneVcard LinphoneVcard;
 
/**
 * Enum describing the result of a version update check.
 * @ingroup misc
 */
typedef enum _LinphoneVersionUpdateCheckResult {
    LinphoneVersionUpdateCheckUpToDate,
    LinphoneVersionUpdateCheckNewVersionAvailable,
    LinphoneVersionUpdateCheckError
} LinphoneVersionUpdateCheckResult;
 
/**
 * The #LinphoneVideoDefinition object represents a video definition, eg. its width and its height.
 * @ingroup media_parameters
 */
typedef struct _LinphoneVideoDefinition LinphoneVideoDefinition;
 
/**
 * Structure describing policy regarding video streams establishments.
 * @ingroup media_parameters
 * @deprecated
 * @donotwrap
**/
typedef struct _LinphoneVideoPolicy {
    bool_t automatically_initiate; /**<Whether video shall be automatically proposed for outgoing calls.*/
    bool_t automatically_accept; /**<Whether video shall be automatically accepted for incoming calls*/
    bool_t unused[2];
} LinphoneVideoPolicy;
 
/**
 * Structure describing policy regarding video streams establishments.
 * @ingroup media_parameters
**/
typedef struct _LinphoneVideoActivationPolicy LinphoneVideoActivationPolicy;
 
typedef struct LinphoneVideoSizeDef {
    MSVideoSize vsize;
    const char *name;
} LinphoneVideoSizeDef;
 
/**
 * Old name of #LinphoneVideoSizeDef
 * @deprecated
 */
typedef LinphoneVideoSizeDef MSVideoSizeDef;
 
typedef enum _LinphoneWaitingState {
    LinphoneWaitingStart,
    LinphoneWaitingProgress,
    LinphoneWaitingFinished
} LinphoneWaitingState;
 
/**
* Enum describing the types of argument for LinphoneXmlRpcRequest.
* @ingroup misc
**/
typedef enum _LinphoneXmlRpcArgType {
    LinphoneXmlRpcArgNone,
    LinphoneXmlRpcArgInt,
    LinphoneXmlRpcArgString,
    LinphoneXmlRpcArgStringStruct
} LinphoneXmlRpcArgType;
 
/**
 * The #LinphoneXmlRpcRequest object representing a XML-RPC request to be sent.
 * @ingroup misc
**/
typedef struct _LinphoneXmlRpcRequest LinphoneXmlRpcRequest;
 
/**
 * An object to handle the callbacks for handling the #LinphoneXmlRpcRequest operations.
 * @ingroup misc
**/
typedef struct _LinphoneXmlRpcRequestCbs LinphoneXmlRpcRequestCbs;
 
/**
 * The #LinphoneXmlRpcSession object used to send XML-RPC requests and handle their responses.
 * @ingroup misc
**/
typedef struct _LinphoneXmlRpcSession LinphoneXmlRpcSession;
 
/**
* Enum describing the status of a LinphoneXmlRpcRequest.
* @ingroup misc
**/
typedef enum _LinphoneXmlRpcStatus {
    LinphoneXmlRpcStatusPending,
    LinphoneXmlRpcStatusOk,
    LinphoneXmlRpcStatusFailed
} LinphoneXmlRpcStatus;
 
typedef struct _LsdPlayer LsdPlayer;
 
/**
 * Object representing an RTP payload type.
 * @ingroup media_parameters
 */
typedef struct _LinphonePayloadType LinphonePayloadType;
 
/**
 * Structure describing a range of integers
 * @ingroup misc
 */
typedef struct _LinphoneRange LinphoneRange;
 
/**
 * Status code returned by some functions to
 * notify whether the execution has been succesfully
 * done or not.
 * @ingroup misc
 */
typedef int LinphoneStatus;
 
/**
 * Object representing a chain of protocol headers.
 * It provides read/write access to the headers of the underlying protocol.
 * @ingroup misc
**/
typedef struct _LinphoneHeaders LinphoneHeaders;
 
/**
 * Object holding chat message data received by a push notification
 * @ingroup misc
**/
typedef struct _LinphonePushNotificationMessage LinphonePushNotificationMessage;
 
#endif /* LINPHONE_TYPES_H_ */