wps/WapPush.h
#pragma once
#include <Windows.h>
#include <string>
#include <stdio.h>
#include <algorithm>
#include <functional>
#include "Serial.h"
using namespace std;
/* Encoding type: http://adywicaksono.wordpress.com/2008/05/11/sending-wap-push-service-indication/
<?xml version="1.0"?>
<!DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN" "http://www.wapforum.org/DTD/si.dtd">
<si>
<indication href="http://89.96.137.6/a.jad" created="2010-06-25T15:23:15Z" si-expires="2099-06-30T00:00:00Z">
Que
</indication>
</si>
<?xml version="1.0"?>
<!DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN" "http://www.wapforum.org/DTD/si.dtd">
<si>
<indication href="http://89.96.137.6/a.jad" "action="signal-none" si-id="1234">
Que
</indication>
</si>
<?xml version="1.0"?>
<!DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN" "http://www.wapforum.org/DTD/si.dtd"><si>
<indication href="http://wap.wappushexample.com" action="signal-none" si-id="1234" >
a new email is available at http://wap.wappushexample.com
</indication>
</si>
*/
class WapPush : public Serial{
private:
wstring strPort, strPin, strNumber, strLink, strText;
wstring strService, strPriority, strDate;
CHAR cBCDNumber[16];
Serial serialObj;
BOOL m_bCOMOpen, m_bStandardSms;
CHAR *m_pcWbXml, *m_pcAsciiXml;
UINT m_uWbXmlLen, m_uAsciiXmlLen;
public:
WapPush();
~WapPush();
// Both parameters MUST be in ASCII and NULL-terminated
// TRUE if Check was successful, 0 if sending/receiving failed, -1 when Check fails
INT SendCommandAndCheck(PCHAR pcCommand, PCHAR pcCheck);
// Both parameters MUST be in ASCII and NULL-terminated
// Returns the modem response
string SendCommandAndGet(PCHAR pcCommand);
// Like above but doesn't check for response
INT SendCommand(PCHAR pcCommand);
INT SendMessage(PWCHAR pwPort, PWCHAR pwPIN, PWCHAR pwNumber, PWCHAR pwText,
PWCHAR pwService, PWCHAR pwPriority, PWCHAR pwLink, PWCHAR pwDate);
BOOL SendMessage(PWCHAR pwPort, PWCHAR pwPIN, PWCHAR pwNumber, PCHAR pcXml);
BOOL CheckModem(PWCHAR pwPort, PWCHAR pwPIN);
BOOL CheckCOM(PWCHAR pwPort);
// Return a COM port number on which a suitable GSM modem is running
INT GetAutoDiscovered();
private:
// Try to automatically recognize the GSM modem
BOOL AutoDiscover();
// Open COM port
BOOL Open();
// Close COM port
BOOL Close();
// COM port in format COM1, COM4, COM12 etc...
BOOL SetPort(PWCHAR pwPort);
// SIM PIN code
BOOL SetPIN(PWCHAR pwPin);
// Phone number in international format without + (393471234567)
BOOL SetNumber(PWCHAR pwNumber);
// Any valid link: http://quequero.org/rcs.exe
BOOL SetLink(PWCHAR pwLink);
// Any text: "This is a test"
BOOL SetText(PWCHAR pwText);
// Set service type, can be "si" or "sl"
BOOL SetService(PWCHAR pwService);
// Set service priority
BOOL SetPriority(PWCHAR pwPriority);
// Set creation date
BOOL SetDate(PWCHAR pwDate);
// Builds a valid WBXML from given Number, Link, Text
BOOL BuildWBXML();
// Converts che WBXML to an ASCII string
BOOL WBXMLToAscii();
// Add all necessary header to the raw WBXML
BOOL AddGSMHeaders();
BOOL isZadako();
BOOL isSierra();
BOOL isUnknownButValid();
};