merged: Linuxport revisions through to r15292.
[xbmc:xbmc-antiquated.git] / xbmc / lib / libGoAhead / XBMChttp.h
1 #pragma once
2
3 #include "utils/UdpClient.h"
4 #include "Key.h"
5 #include "boost/shared_ptr.hpp"
6
7 /******************************** Description *********************************/
8
9 /* 
10  *  Header file that provides an API over HTTP between the web server and XBMC
11  *
12  *            heavily based on XBMCweb.h
13  */
14
15 /********************************* Includes ***********************************/
16
17 typedef char char_t;
18 typedef struct websRec *webs_t;
19
20 class CFileItem; typedef boost::shared_ptr<CFileItem> CFileItemPtr;
21
22 class CXbmcHttpShim
23 {
24 public:
25   CXbmcHttpShim();
26   ~CXbmcHttpShim();
27
28   void xbmcForm(webs_t wp, char_t *path, char_t *query);
29   int   xbmcCommand( int eid, webs_t wp, int argc, char_t **argv);
30   CStdString xbmcProcessCommand( int eid, webs_t wp, char_t *command, char_t *parameter);
31   CStdString xbmcExternalCall(char *command);
32   bool checkForFunctionTypeParas(CStdString &cmd, CStdString &paras);
33 private:
34   CStdString flushResult(int eid, webs_t wp, const CStdString &output);
35 };
36
37 class CUdpBroadcast : public CUdpClient
38 {
39 public:
40   CUdpBroadcast();
41   ~CUdpBroadcast();
42   bool broadcast(CStdString message, int port);
43 };
44
45 class CXbmcHttp
46 {
47 public:
48   CStdString userHeader, userFooter;
49   bool incWebFooter, incWebHeader, shuttingDown;
50
51   CXbmcHttp();
52   ~CXbmcHttp();
53
54   int xbmcCommand(const CStdString &parameter);
55   int xbmcAddToPlayList(int numParas, CStdString paras[]);
56   int xbmcPlayerPlayFile(int numParas, CStdString paras[]); 
57   int xbmcClearPlayList(int numParas, CStdString paras[]); 
58   int xbmcGetCurrentlyPlaying(int numParas, CStdString paras[]); 
59   int xbmcGetXBEID(int numParas, CStdString paras[]); 
60   int xbmcGetXBETitle(int numParas, CStdString paras[]); 
61   int xbmcGetSources(int numParas, CStdString paras[]);
62   int xbmcGetMediaLocation(int numParas, CStdString paras[]);
63   int xbmcGetDirectory(int numParas, CStdString paras[]);
64   int xbmcGetTagFromFilename(int numParas, CStdString paras[]); 
65   int xbmcGetCurrentPlayList();
66   int xbmcSetCurrentPlayList(int numParas, CStdString paras[]);
67   int xbmcGetPlayListContents(int numParas, CStdString paras[]);
68   int xbmcGetPlayListLength(int numParas, CStdString paras[]);
69   int xbmcRemoveFromPlayList(int numParas, CStdString paras[]);
70   int xbmcSetPlayListSong(int numParas, CStdString paras[]);
71   int xbmcGetPlayListSong(int numParas, CStdString paras[]);
72   int xbmcSetPlaySpeed(int numParas, CStdString paras[]);
73   int xbmcGetPlaySpeed();
74   int xbmcPlayListNext();
75   int xbmcPlayListPrev();
76   int xbmcSetVolume(int numParas, CStdString paras[]);
77   int xbmcGetVolume();
78   int xbmcMute();
79   int xbmcGetPercentage();
80   int xbmcSeekPercentage(int numParas, CStdString paras[], bool relative);
81   int xbmcAction(int numParas, CStdString paras[], int theAction);
82   int xbmcExit(int theAction);
83   int xbmcGetThumb(int numParas, CStdString paras[], bool bGetThumb);
84   int xbmcGetThumbFilename(int numParas, CStdString paras[]);
85   int xbmcLookupAlbum(int numParas, CStdString paras[]);
86   int xbmcChooseAlbum(int numParas, CStdString paras[]);
87   int xbmcQueryMusicDataBase(int numParas, CStdString paras[]);
88   int xbmcQueryVideoDataBase(int numParas, CStdString paras[]);
89   int xbmcDownloadInternetFile(int numParas, CStdString paras[]);
90   int xbmcSetKey(int numParas, CStdString paras[]);
91   int xbmcSetKeyRepeat(int numParas, CStdString paras[]);
92   int xbmcGetMovieDetails(int numParas, CStdString paras[]);
93   int xbmcDeleteFile(int numParas, CStdString paras[]);
94   int xbmcCopyFile(int numParas, CStdString paras[]);
95   int xbmcSetFile(int numParas, CStdString paras[]);
96   int xbmcFileExists(int numParas, CStdString paras[]);
97   int xbmcFileSize(int numParas, CStdString paras[]);
98   int xbmcShowPicture(int numParas, CStdString paras[]);
99   int xbmcGetGUIStatus();
100   int xbmcExecBuiltIn(int numParas, CStdString paras[]);
101   int xbmcConfig(int numParas, CStdString paras[]);
102   int xbmcHelp();
103   int xbmcGetSystemInfo(int numParas, CStdString paras[]);
104   int xbmcGetSystemInfoByName(int numParas, CStdString paras[]);
105   int xbmcAddToSlideshow(int numParas, CStdString paras[]);
106   int xbmcClearSlideshow();
107   int xbmcPlaySlideshow(int numParas, CStdString paras[]);
108   int xbmcSlideshowSelect(int numParas, CStdString paras[]);
109   int xbmcGetSlideshowContents();
110   int xbmcGetCurrentSlide();
111   int xbmcGUISetting(int numParas, CStdString paras[]);
112   int xbmcTakeScreenshot(int numParas, CStdString paras[]);
113   int xbmcGetGUIDescription();
114   int xbmcAutoGetPictureThumbs(int numParas, CStdString paras[]);
115   int xbmcSetResponseFormat(int numParas, CStdString paras[]);
116   int xbmcSpinDownHardDisk(int numParas, CStdString paras[]);
117   int xbmcBroadcast(int numParas, CStdString paras[]);
118   bool xbmcBroadcast(CStdString message, int level=0);
119   int xbmcSetBroadcast(int numParas, CStdString paras[]);
120   int xbmcGetBroadcast();
121   int xbmcOnAction(int numParas, CStdString paras[]);
122   int xbmcRecordStatus(int numParas, CStdString paras[]);
123   int xbmcGetMusicLabel(int numParas, CStdString paras[]);
124   int xbmcGetVideoLabel(int numParas, CStdString paras[]);
125   int xbmcGetSkinSetting(int numParas, CStdString paras[]);
126   int xbmcWebServerStatus(int numParas, CStdString paras[]);
127   int xbmcGetLogLevel();
128   int xbmcSetLogLevel(int numParas, CStdString paras[]);
129   CKey GetKey();
130   void ResetKey();
131   CStdString GetOpenTag();
132   CStdString GetCloseTag();
133
134 private:
135   CKey key;
136   CUdpBroadcast* pUdpBroadcast;
137   CUdpClient UdpClient;
138   bool UdpClientInit;
139   CKey lastKey;
140   int repeatKeyRate; //ms
141   DWORD MarkTime;
142   bool autoGetPictureThumbs;
143   CStdString lastThumbFn, lastPlayingInfo;
144   CStdString openTag, closeTag,  openRecordSet, closeRecordSet, openRecord, closeRecord, openField, closeField, openBroadcast, closeBroadcast;
145   bool  closeFinalTag;
146
147   void encodeblock( unsigned char in[3], unsigned char out[4], int len );
148   CStdString encodeFileToBase64(const CStdString &inFilename, int linesize );
149   void decodeblock( unsigned char in[4], unsigned char out[3] );
150   bool decodeBase64ToFile( const CStdString &inString, const CStdString &outfilename, bool append = false );
151   __int64 fileSize(const CStdString &filename);
152   void resetTags();
153   CStdString procMask(CStdString mask);
154   int splitParameter(const CStdString &parameter, CStdString& command, CStdString paras[], const CStdString &sep);
155   bool playableFile(const CStdString &filename);
156   int SetResponse(const CStdString &response);
157   CStdString flushResult(int eid, webs_t wp, const CStdString &output);
158   int displayDir(int numParas, CStdString paras[]);
159   void SetCurrentMediaItem(CFileItem& newItem);
160   void AddItemToPlayList(const CFileItemPtr &pItem, int playList, int sortMethod, CStdString mask, bool recursive);
161   void LoadPlayListOld(const CStdString& strPlayList, int playList);
162   bool LoadPlayList(CStdString strPath, int iPlaylist, bool clearList, bool autoStart);
163   void copyThumb(CStdString srcFn, CStdString destFn);
164 };
165
166 /****************
167  *  Command names
168  */
169 #define WEB_COMMAND T("command")
170 #define WEB_PARAMETER T("parameter")
171
172 extern CXbmcHttp* m_pXbmcHttp; //make it global so Application.cpp can access it for key/button messages
173 extern CXbmcHttpShim* pXbmcHttpShim;