#include #include #include "stringutils.h" #include "debug.h" class RilClass { HRIL m_hRil; public: RilClass() { DWORD dwIndex= 1; HRESULT res= RIL_Initialize(dwIndex, &ResultProc, &NotifyProc, 0xffff0000, (DWORD)this, &m_hRil); if (res) { error("RIL_Initialize: %08lx", res); m_hRil= NULL; } debug("RIL_Initialize: opened: h=%08lx\n", m_hRil); } ~RilClass() { if (m_hRil) { HRESULT res= RIL_Deinitialize(m_hRil); if (res) { error("RIL_Deinitialize: %08lx", res); } m_hRil= 0; } } static void ResultProc(DWORD dwCode, HRESULT hrCmdID, const void *lpData, DWORD cbdata, DWORD dwParam) { ((RilClass*)dwParam)->HandleResult(dwCode, hrCmdID, lpData, cbdata); } static void NotifyProc(DWORD dwCode, const void *lpData, DWORD cbdata, DWORD dwParam) { ((RilClass*)dwParam)->HandleNotify(dwCode, lpData, cbdata); } void HandleResult(DWORD dwCode, HRESULT hrCmdID, const void *lpData, DWORD cbdata) { debug("result: code=%08lx cmd=%08lx data=%08lx/%08lx\n", dwCode, hrCmdID, lpData, cbdata); } void HandleNotify(DWORD dwCode, const void *lpData, DWORD cbdata) { debug("event : code=%08lx data=%08lx/%08lx\n", dwCode, lpData, cbdata); } bool AddCallForwarding(DWORD dwReason, const std::string& number) { RILCALLFORWARDINGSETTINGS cf; memset(&cf, 0, sizeof(cf)); cf.cbSize= sizeof(RILCALLFORWARDINGSETTINGS); cf.dwParams= RIL_PARAM_CFS_ALL&~(RIL_PARAM_CFS_SUBADDRESS|RIL_PARAM_CFS_DELAYTIME); cf.dwStatus=0; cf.dwInfoClasses=RIL_INFOCLASS_ALL; // RIL_INFOCLASS_VOICE|RIL_INFOCLASS_SMS cf.raAddress.cbSize= sizeof(RILADDRESS); cf.raAddress.dwParams=RIL_PARAM_A_ALL; cf.raAddress.dwType=RIL_ADDRTYPE_UNKNOWN; cf.raAddress.dwNumPlan=RIL_NUMPLAN_TELEPHONE; wcscpy(cf.raAddress.wszAddress, ToWString(number).c_str()); //memset(cf.rsaSubAddress, 0, sizeof(RILSUBADDRESS)); cf.dwDelayTime=0; HRESULT hr= RIL_AddCallForwarding(m_hRil, dwReason, &cf); if (IS_ERROR(hr)) { error(hr, "RIL_AddCallForwarding"); return false; } debug("addforwarding->%08lx\n", hr); return true; } }; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { DebugSetLogfile("setcfwd.log"); RilClass r; std::string arg= ToString(lpCmdLine); r.AddCallForwarding(RIL_FWDREASON_UNCONDITIONAL, arg); Sleep(10000); return 0; }