00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef UPNP_H
00034 #define UPNP_H
00035
00036
00046 #include "ixml.h"
00047 #include "upnpconfig.h"
00048 #include "UpnpGlobal.h"
00049 #include "UpnpInet.h"
00050
00051
00052
00053
00054
00055
00056 #ifdef WIN32
00057 #include <time.h>
00058 #elif (defined(BSD) && BSD >= 199306)
00059 #include <time.h>
00060 #else
00061
00062 #endif
00063
00064
00065 #ifdef WIN32
00066
00067 #else
00068 #include <sys/param.h>
00069 #endif
00070
00071
00072 #ifdef WIN32
00073 #include <iphlpapi.h>
00074 #else
00075 #define SOCKET int
00076 #define INVALID_SOCKET (SOCKET)(~0)
00077 #endif
00078
00079
00080 #ifdef WIN32
00081 #define UpnpCloseSocket closesocket
00082 #define fseeko fseek
00083 #else
00084 #define UpnpCloseSocket close
00085 #endif
00086
00087
00088 #define NUM_HANDLE 200
00089 #define LINE_SIZE 180
00090 #define NAME_SIZE 256
00091 #define MNFT_NAME_SIZE 64
00092 #define MODL_NAME_SIZE 32
00093 #define SERL_NUMR_SIZE 64
00094 #define MODL_DESC_SIZE 64
00095 #define UPNP_INFINITE -1
00096 #define UPNP_USING_CHUNKED -3
00097 #define UPNP_UNTIL_CLOSE -4
00098
00099
00119 #define UPNP_E_SUCCESS 0
00120
00124 #define UPNP_E_INVALID_HANDLE -100
00125
00132 #define UPNP_E_INVALID_PARAM -101
00133
00139 #define UPNP_E_OUTOF_HANDLE -102
00140
00141 #define UPNP_E_OUTOF_CONTEXT -103
00142
00148 #define UPNP_E_OUTOF_MEMORY -104
00149
00156 #define UPNP_E_INIT -105
00157
00158 #define UPNP_E_BUFFER_TOO_SMALL -106
00159
00164 #define UPNP_E_INVALID_DESC -107
00165
00173 #define UPNP_E_INVALID_URL -108
00174
00175 #define UPNP_E_INVALID_SID -109
00176
00177 #define UPNP_E_INVALID_DEVICE -110
00178
00185 #define UPNP_E_INVALID_SERVICE -111
00186
00193 #define UPNP_E_BAD_RESPONSE -113
00194
00195 #define UPNP_E_BAD_REQUEST -114
00196
00203 #define UPNP_E_INVALID_ACTION -115
00204
00210 #define UPNP_E_FINISH -116
00211
00217 #define UPNP_E_INIT_FAILED -117
00218
00224 #define UPNP_E_URL_TOO_BIG -118
00225
00235 #define UPNP_E_BAD_HTTPMSG -119
00236
00243 #define UPNP_E_ALREADY_REGISTERED -120
00244
00249 #define UPNP_E_INVALID_INTERFACE -121
00250
00258 #define UPNP_E_NETWORK_ERROR -200
00259
00268 #define UPNP_E_SOCKET_WRITE -201
00269
00278 #define UPNP_E_SOCKET_READ -202
00279
00288 #define UPNP_E_SOCKET_BIND -203
00289
00298 #define UPNP_E_SOCKET_CONNECT -204
00299
00308 #define UPNP_E_OUTOF_SOCKET -205
00309
00316 #define UPNP_E_LISTEN -206
00317
00324 #define UPNP_E_TIMEDOUT -207
00325
00332 #define UPNP_E_SOCKET_ERROR -208
00333
00334 #define UPNP_E_FILE_WRITE_ERROR -209
00335
00340 #define UPNP_E_CANCELED -210
00341
00342 #define UPNP_E_EVENT_PROTOCOL -300
00343
00347 #define UPNP_E_SUBSCRIBE_UNACCEPTED -301
00348
00352 #define UPNP_E_UNSUBSCRIBE_UNACCEPTED -302
00353
00357 #define UPNP_E_NOTIFY_UNACCEPTED -303
00358
00365 #define UPNP_E_INVALID_ARGUMENT -501
00366
00371 #define UPNP_E_FILE_NOT_FOUND -502
00372
00376 #define UPNP_E_FILE_READ_ERROR -503
00377
00382 #define UPNP_E_EXT_NOT_XML -504
00383
00384 #define UPNP_E_NO_WEB_SERVER -505
00385 #define UPNP_E_OUTOF_BOUNDS -506
00386
00391 #define UPNP_E_NOT_FOUND -507
00392
00397 #define UPNP_E_INTERNAL_ERROR -911
00398
00399
00400 #define UPNP_SOAP_E_INVALID_ACTION 401
00401 #define UPNP_SOAP_E_INVALID_ARGS 402
00402 #define UPNP_SOAP_E_OUT_OF_SYNC 403
00403 #define UPNP_SOAP_E_INVALID_VAR 404
00404 #define UPNP_SOAP_E_ACTION_FAILED 501
00405
00406
00407
00408 #ifndef OUT
00409 #define OUT
00410 #endif
00411
00412 #ifndef IN
00413 #define IN
00414 #endif
00415
00416 #ifndef INOUT
00417 #define INOUT
00418 #endif
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431 #include "ActionComplete.h"
00432 #include "ActionRequest.h"
00433 #include "Discovery.h"
00434 #include "Event.h"
00435 #include "EventSubscribe.h"
00436 #include "FileInfo.h"
00437 #include "StateVarComplete.h"
00438 #include "StateVarRequest.h"
00439 #include "SubscriptionRequest.h"
00440
00441
00448 enum UpnpOpenFileMode
00449 {
00450 UPNP_READ,
00451 UPNP_WRITE
00452 };
00453
00461 typedef int UpnpClient_Handle;
00462
00470 typedef int UpnpDevice_Handle;
00471
00479 enum Upnp_EventType_e {
00480
00481
00482
00483
00488 UPNP_CONTROL_ACTION_REQUEST,
00489
00493 UPNP_CONTROL_ACTION_COMPLETE,
00494
00499 UPNP_CONTROL_GET_VAR_REQUEST,
00500
00504 UPNP_CONTROL_GET_VAR_COMPLETE,
00505
00506
00507
00508
00509
00514 UPNP_DISCOVERY_ADVERTISEMENT_ALIVE,
00515
00520 UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE,
00521
00526 UPNP_DISCOVERY_SEARCH_RESULT,
00527
00531 UPNP_DISCOVERY_SEARCH_TIMEOUT,
00532
00533
00534
00535
00536
00546 UPNP_EVENT_SUBSCRIPTION_REQUEST,
00547
00551 UPNP_EVENT_RECEIVED,
00552
00556 UPNP_EVENT_RENEWAL_COMPLETE,
00557
00561 UPNP_EVENT_SUBSCRIBE_COMPLETE,
00562
00566 UPNP_EVENT_UNSUBSCRIBE_COMPLETE,
00567
00572 UPNP_EVENT_AUTORENEWAL_FAILED,
00573
00578 UPNP_EVENT_SUBSCRIPTION_EXPIRED
00579 };
00580
00581 typedef enum Upnp_EventType_e Upnp_EventType;
00582
00590 typedef char Upnp_SID[44];
00591
00600 enum Upnp_SType_e {
00602 UPNP_S_ALL,
00603
00605 UPNP_S_ROOT,
00606
00608 UPNP_S_DEVICE,
00609
00612 UPNP_S_SERVICE
00613 };
00614
00615 typedef enum Upnp_SType_e Upnp_SType;
00616
00623 enum Upnp_DescType_e {
00625 UPNPREG_URL_DESC,
00626
00629 UPNPREG_FILENAME_DESC,
00630
00633 UPNPREG_BUF_DESC
00634 };
00635
00636 typedef enum Upnp_DescType_e Upnp_DescType;
00637
00638
00664 typedef int (*Upnp_FunPtr)(
00666 Upnp_EventType EventType,
00668 void *Event,
00670 void *Cookie);
00671
00672
00673
00674
00675 #ifdef __cplusplus
00676 extern "C" {
00677 #endif
00678
00679
00720 EXPORT_SPEC int UpnpInit(
00723 const char *HostIP,
00726 unsigned short DestPort);
00727
00728
00761 EXPORT_SPEC int UpnpInit2(
00765 const char *IfName,
00768 unsigned short DestPort);
00769
00770
00790 EXPORT_SPEC int UpnpFinish(void);
00791
00792
00804 EXPORT_SPEC unsigned short UpnpGetServerPort(void);
00805
00806
00818 EXPORT_SPEC unsigned short UpnpGetServerPort6(void);
00819
00831 EXPORT_SPEC const char *UpnpGetServerIpAddress(void);
00832
00833
00845 EXPORT_SPEC const char *UpnpGetServerIp6Address(void);
00846
00847
00884 EXPORT_SPEC int UpnpRegisterRootDevice(
00887 const char *DescUrl,
00889 Upnp_FunPtr Callback,
00891 const void *Cookie,
00893 UpnpDevice_Handle *Hnd);
00894
00963 EXPORT_SPEC int UpnpRegisterRootDevice2(
00965 Upnp_DescType descriptionType,
00968 const char* description,
00971 size_t bufferLen,
00974 int config_baseURL,
00976 Upnp_FunPtr Fun,
00979 const void* Cookie,
00981 UpnpDevice_Handle* Hnd);
00982
00983
01019 EXPORT_SPEC int UpnpRegisterRootDevice3(
01022 const char *DescUrl,
01024 Upnp_FunPtr Callback,
01026 const void *Cookie,
01028 UpnpDevice_Handle *Hnd,
01031 const int AddressFamily);
01032
01033
01049 EXPORT_SPEC int UpnpUnRegisterRootDevice(
01051 UpnpDevice_Handle Hnd);
01052
01053
01072 EXPORT_SPEC int UpnpRegisterClient(
01074 Upnp_FunPtr Callback,
01076 const void *Cookie,
01078 UpnpClient_Handle *Hnd);
01079
01080
01097 EXPORT_SPEC int UpnpUnRegisterClient(
01099 UpnpClient_Handle Hnd);
01100
01101
01108 EXPORT_SPEC int UpnpSetContentLength(
01111 UpnpClient_Handle Hnd,
01113 int contentLength);
01114
01115
01130 EXPORT_SPEC int UpnpSetMaxContentLength(
01133 size_t contentLength);
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144
01145
01146
01147
01178 EXPORT_SPEC int UpnpSearchAsync(
01180 UpnpClient_Handle Hnd,
01185 int Mx,
01188 const char *TTarget_constarget_const,
01190 const void *Cookie_const);
01191
01207 EXPORT_SPEC int UpnpSendAdvertisement(
01209 UpnpDevice_Handle Hnd,
01211 int Exp);
01212
01213
01214
01215
01216
01217
01218
01219
01220
01221
01222
01223
01224
01225
01258 EXPORT_SPEC int UpnpGetServiceVarStatus(
01260 UpnpClient_Handle Hnd,
01262 const char *ActionURL,
01264 const char *VarName,
01268 DOMString *StVarVal);
01269
01270
01288 EXPORT_SPEC int UpnpGetServiceVarStatusAsync(
01290 UpnpClient_Handle Hnd,
01292 const char *ActionURL,
01294 const char *VarName,
01297 Upnp_FunPtr Fun,
01299 const void *Cookie);
01300
01301
01325 EXPORT_SPEC int UpnpSendAction(
01327 UpnpClient_Handle Hnd,
01329 const char *ActionURL,
01331 const char *ServiceType,
01333 const char *DevUDN,
01335 IXML_Document *Action,
01338 IXML_Document **RespNode);
01339
01340
01364 EXPORT_SPEC int UpnpSendActionEx(
01366 UpnpClient_Handle Hnd,
01368 const char *ActionURL,
01370 const char *ServiceType,
01372 const char *DevUDN,
01375 IXML_Document *Header,
01377 IXML_Document *Action,
01380 IXML_Document **RespNode);
01381
01382
01404 EXPORT_SPEC int UpnpSendActionAsync(
01406 UpnpClient_Handle Hnd,
01408 const char *ActionURL,
01410 const char *ServiceType,
01412 const char *DevUDN,
01414 IXML_Document *Action,
01417 Upnp_FunPtr Fun,
01420 const void *Cookie);
01421
01422
01444 EXPORT_SPEC int UpnpSendActionExAsync(
01446 UpnpClient_Handle Hnd,
01448 const char *ActionURL,
01450 const char *ServiceType,
01452 const char *DevUDN,
01455 IXML_Document *Header,
01457 IXML_Document *Action,
01460 Upnp_FunPtr Fun,
01463 const void *Cookie);
01464
01465
01469
01470
01471
01472
01473
01474
01475
01476
01477
01510 EXPORT_SPEC int UpnpAcceptSubscription(
01512 UpnpDevice_Handle Hnd,
01514 const char *DevID,
01516 const char *ServID,
01518 const char **VarName,
01520 const char **NewVal,
01522 int cVariables,
01524 const Upnp_SID SubsId);
01525
01526
01549 EXPORT_SPEC int UpnpAcceptSubscriptionExt(
01551 UpnpDevice_Handle Hnd,
01553 const char *DevID,
01555 const char *ServID,
01559 IXML_Document *PropSet,
01561 const Upnp_SID SubsId);
01562
01563
01585 EXPORT_SPEC int UpnpNotify(
01587 UpnpDevice_Handle,
01589 const char *DevID,
01591 const char *ServID,
01593 const char **VarName,
01595 const char **NewVal,
01597 int cVariables);
01598
01599
01621 EXPORT_SPEC int UpnpNotifyExt(
01623 UpnpDevice_Handle,
01625 const char *DevID,
01627 const char *ServID,
01631 IXML_Document *PropSet);
01632
01633
01662 EXPORT_SPEC int UpnpRenewSubscription(
01664 UpnpClient_Handle Hnd,
01667 int *TimeOut,
01669 const Upnp_SID SubsId);
01670
01671
01719 EXPORT_SPEC int UpnpRenewSubscriptionAsync(
01721 UpnpClient_Handle Hnd,
01724 int TimeOut,
01726 Upnp_SID SubsId,
01729 Upnp_FunPtr Fun,
01731 const void *Cookie);
01732
01733
01747 EXPORT_SPEC int UpnpSetMaxSubscriptions(
01750 UpnpDevice_Handle Hnd,
01752 int MaxSubscriptions);
01753
01754
01769 EXPORT_SPEC int UpnpSetMaxSubscriptionTimeOut(
01772 UpnpDevice_Handle Hnd,
01774 int MaxSubscriptionTimeOut);
01775
01776
01806 EXPORT_SPEC int UpnpSubscribe(
01808 UpnpClient_Handle Hnd,
01810 const char *PublisherUrl,
01814 int *TimeOut,
01816 Upnp_SID SubsId);
01817
01818
01867 EXPORT_SPEC int UpnpSubscribeAsync(
01869 UpnpClient_Handle Hnd,
01871 const char *PublisherUrl,
01874 int TimeOut,
01876 Upnp_FunPtr Fun,
01878 const void *Cookie);
01879
01880
01910 EXPORT_SPEC int UpnpUnSubscribe(
01912 UpnpClient_Handle Hnd,
01914 const Upnp_SID SubsId);
01915
01916
01963 EXPORT_SPEC int UpnpUnSubscribeAsync(
01965 UpnpClient_Handle Hnd,
01967 Upnp_SID SubsId,
01970 Upnp_FunPtr Fun,
01972 const void *Cookie);
01973
01974
01979
01980
01981
01982
01983
01984
01985
01986
02019 EXPORT_SPEC int UpnpDownloadUrlItem(
02021 const char *url,
02023 char **outBuf,
02026 char *contentType);
02027
02028
02057 EXPORT_SPEC int UpnpOpenHttpGet(
02059 const char *url,
02061 void **handle,
02063 char **contentType,
02065 int *contentLength,
02067 int *httpStatus,
02071 int timeout);
02072
02073
02102 EXPORT_SPEC int UpnpOpenHttpGetProxy(
02104 const char *url,
02106 const char *proxy_str,
02108 void **handle,
02110 char **contentType,
02112 int *contentLength,
02114 int *httpStatus,
02118 int timeout);
02119
02120
02151 EXPORT_SPEC int UpnpOpenHttpGetEx(
02153 const char *url,
02155 void **handle,
02157 char **contentType,
02159 int *contentLength,
02161 int *httpStatus,
02163 int lowRange,
02165 int highRange,
02169 int timeout);
02170
02171
02189 EXPORT_SPEC int UpnpReadHttpGet(
02191 void *handle,
02193 char *buf,
02195 unsigned int *size,
02199 int timeout);
02200
02201
02210 EXPORT_SPEC int UpnpHttpGetProgress(
02212 void *handle,
02214 unsigned int *length,
02216 unsigned int *total);
02217
02218
02226 EXPORT_SPEC int UpnpCancelHttpGet(
02229 void *handle);
02230
02239 EXPORT_SPEC int UpnpCloseHttpGet(
02242 void *handle);
02243
02244
02270 EXPORT_SPEC int UpnpOpenHttpPost(
02272 const char *url,
02275 void **handle,
02277 const char *contentType,
02279 int contentLength,
02282 int timeout);
02283
02284
02298 EXPORT_SPEC int UpnpWriteHttpPost(
02301 void *handle,
02303 char *buf,
02305 unsigned int *size,
02308 int timeout);
02309
02310
02324 EXPORT_SPEC int UpnpCloseHttpPost(
02327 void *handle,
02329 int *httpStatus,
02332 int timeout);
02333
02334
02362 EXPORT_SPEC int UpnpDownloadXmlDoc(
02364 const char *url,
02366 IXML_Document **xmlDoc);
02367
02368
02371
02372
02373
02374
02375
02376
02377
02378
02401 EXPORT_SPEC int UpnpSetWebServerRootDir(
02403 const char *rootDir);
02404
02405
02409 typedef void *UpnpWebFileHandle;
02410
02411
02415 typedef int (*VDCallback_GetInfo)(
02417 const char *filename,
02419 UpnpFileInfo *info);
02420
02421
02430 EXPORT_SPEC int UpnpVirtualDir_set_GetInfoCallback(VDCallback_GetInfo callback);
02431
02432
02436 typedef UpnpWebFileHandle (*VDCallback_Open)(
02438 const char *filename,
02441 enum UpnpOpenFileMode Mode);
02442
02443
02452 EXPORT_SPEC int UpnpVirtualDir_set_OpenCallback(VDCallback_Open callback);
02453
02454
02458 typedef int (*VDCallback_Read)(
02460 UpnpWebFileHandle fileHnd,
02462 char *buf,
02464 size_t buflen);
02465
02466
02475 EXPORT_SPEC int UpnpVirtualDir_set_ReadCallback(VDCallback_Read callback);
02476
02477
02481 typedef int (*VDCallback_Write)(
02483 UpnpWebFileHandle fileHnd,
02485 char *buf,
02487 size_t buflen);
02488
02489
02498 EXPORT_SPEC int UpnpVirtualDir_set_WriteCallback(VDCallback_Write callback);
02499
02500
02504 typedef int (*VDCallback_Seek) (
02506 UpnpWebFileHandle fileHnd,
02510 off_t offset,
02515 int origin);
02516
02517
02526 EXPORT_SPEC int UpnpVirtualDir_set_SeekCallback(VDCallback_Seek callback);
02527
02528
02532 typedef int (*VDCallback_Close)(
02534 UpnpWebFileHandle fileHnd);
02535
02536
02545 EXPORT_SPEC int UpnpVirtualDir_set_CloseCallback(VDCallback_Close callback);
02546
02547
02555 EXPORT_SPEC int UpnpEnableWebserver(
02557 int enable);
02558
02559
02567 EXPORT_SPEC int UpnpIsWebserverEnabled(void);
02568
02569
02584 EXPORT_SPEC int UpnpAddVirtualDir(
02586 const char *dirName);
02587
02588
02596 EXPORT_SPEC int UpnpRemoveVirtualDir(
02598 const char *dirName);
02599
02600
02604 EXPORT_SPEC void UpnpRemoveAllVirtualDirs(void);
02605
02606
02607
02608
02609
02610
02611 #ifdef __cplusplus
02612 }
02613 #endif
02614
02615
02616
02617
02618
02619 #endif
02620