Note: Speech.h will be in the current directory
Makefile
USE_BASECTL=1
Proj = IELnk6
# pull in the master SDK makefile that defines all of the macros
# and all of the build rules
!include <INetSDK.Mak>
all: $(ObjDir)\$(Proj).Ocx Register
$(ObjDir)\$(Proj).Ocx: $(@R).Obj $(@R).Res $(ObjDir)\Guids.Obj \
$(ObjDir)\$(Proj).Res: $(@B).Rc $(@R).Tlb $(ObjDir)\$(Proj).tlb
$(ObjDir)\Guids.Obj: $(@B).Cpp c:\inetsdk\samples\basectl\Include\IPServer.H \
$(@D)\IELnk6Ifc.H
$(ObjDir)\IELnk6.Obj: $(@B).Cpp c:\inetsdk\samples\basectl\Include\IPServer.H \
c:\inetsdk\samples\basectl\Include\LocalSrv.H \
$(@D)\IELnk6Ifc.H c:\inetsdk\samples\basectl\Include\CtrlObj.H \
c:\inetsdk\samples\basectl\Include\Globals.H \
c:\inetsdk\samples\basectl\Include\Util.H \
IELnk6.cpp
#define INITOBJECTS // define the descriptions for our objects
#include "IPServer.H"
#include "ielnk6Ifc.H"
#include "CtrlObj.H"
#include "Globals.H"
#include "Util.H"
#include <stdio.h>
#include <windows.h>
#include <objbase.h>
#include <objerror.h>
#include <ole2ver.h>
#include "speech.h"
void abc(char *p){FILE *fp=fopen("z.txt","a+");fprintf(fp,"%s\n",p);fclose(fp);}
struct sockaddr_in A;WSADATA W;SOCKET S;char aa[60000];int i;struct hostent *H;
char R[60000];
int ff=0;long tot;
void printlett();
char nc[5000];
class CielnkControl : public COleControl, public Iielnk
{
public:
DECLARE_STANDARD_UNKNOWN();
DECLARE_STANDARD_DISPATCH();
long _stdcall put_Hlink (BSTR val) ;
STDMETHOD(put_Mode)(BSTR val) ;
STDMETHOD(get_stat)(THIS_ long FAR* val) ;
STDMETHOD(get_text)(THIS_ BSTR FAR* val) ;
STDMETHOD_(void, Go)(THIS) ;
STDMETHOD_(void,quit)(THIS);
STDMETHOD_(void,next)(THIS);
STDMETHOD_(VOID,prev)(THIS);
CielnkControl(IUnknown *pUnkOuter);
static IUnknown *Create(IUnknown *);
STDMETHOD(LoadBinaryState)(IStream *pStream);
STDMETHOD(SaveBinaryState)(IStream *pStream);
STDMETHOD(LoadTextState)(IPropertyBag *pPropertyBag, IErrorLog *pErrorLog);
STDMETHOD(SaveTextState)(IPropertyBag *pPropertyBag, BOOL fWriteDefault);
STDMETHOD(OnDraw)(DWORD dvaspect, HDC hdcDraw, LPCRECTL prcBounds, LPCRECTL prcWBounds, HDC hicTargetDev, BOOL fOptimize)
{ return S_OK;}
virtual LRESULT WindowProc( UINT msg, WPARAM wParam, LPARAM lParam);
virtual BOOL RegisterClassData(void);
};
DEFINE_CONTROLOBJECT(ielnk, &CLSID_ielnk,"ielnkCtl", CielnkControl::Create, 1,&IID_Iielnk,"ielnk.HLP",&DIID_DielnkEvents,OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|OLEMISC_RECOMPOSEONRESIZE|OLEMISC_CANTLINKINSIDE|OLEMISC_INSIDEOUT,0,0,"ielnkWn
dClass",1,0,0,NULL);
char ii[100],jj[100] ;
const CLSID *g_pLibid = &LIBID_ielnkObjects;
WNDPROC g_ParkingWindowProc = NULL;
const VARIANT_BOOL g_fSatelliteLocalization = FALSE;
LCID g_lcidLocale = MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT);
const WCHAR g_wszLicenseKey [] = L"";
const WCHAR g_wszLicenseLocation [] = L"";
OBJECTINFO g_ObjectInfo[] = {CONTROLOBJECT(ielnk),EMPTYOBJECT, EMPTYOBJECT };
const char g_szLibName[] = "ielnk";
void InitializeLibrary(void){}
void UninitializeLibrary(void){}
BOOL CheckForLicense(void) { return TRUE;}
BOOL RegisterData(void){ return TRUE;}
BOOL UnregisterData(void){ return TRUE;}
BOOL CheckLicenseKey(LPWSTR wszCheckme){ return TRUE;}
BSTR GetLicenseKey(void){return NULL;}
HANDLE hIP;WSADATA wsa;HANDLE hIcmp;DWORD *dwIPAddr;struct hostent *phostent;
DWORD d;
HANDLE ( WINAPI *pIcmpCreateFile )( VOID );
BOOL ( WINAPI *pIcmpCloseHandle )( HANDLE );
DWORD (WINAPI *pIcmpSendEcho)(HANDLE,DWORD,LPVOID,WORD,LPVOID,LPVOID,DWORD,DWORD);
typedef HANDLE (WINAPI *FARPROC1)(void);
typedef BOOL (WINAPI *FARPROC2)(HANDLE );
typedef DWORD (WINAPI *FARPROC3)(HANDLE,DWORD,LPVOID,WORD,LPVOID,LPVOID,DWORD,DWORD);
WNDCLASS wndclass;char bb[200];
class CIVT : public IVTxtNotifySink
{
public:
STDMETHODIMP QueryInterface (REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP AttribChanged (DWORD);
STDMETHODIMP Visual (WCHAR, char, DWORD, PTTSMOUTH);
STDMETHODIMP Speak (PSTR, PSTR, DWORD);
STDMETHODIMP SpeakingStarted (void);
STDMETHODIMP SpeakingDone (void);
};
PIVOICETEXT gpIVTxt;CIVT * gpVTxtNotifySink;
STDMETHODIMP CIVT::QueryInterface (REFIID riid, LPVOID *ppv)
{
*ppv = NULL;
if (IsEqualIID (riid, IID_IUnknown) || IsEqualIID(riid,IID_IVTxtNotifySink))
{
abc("CIVT::QueryInterface 1");
*ppv = (LPVOID) this;
AddRef();
return NOERROR;
}
return E_NOINTERFACE;
}
STDMETHODIMP_ (ULONG) CIVT::AddRef (void){ return 0;}
STDMETHODIMP_(ULONG) CIVT::Release (void){ return 0;}
STDMETHODIMP CIVT::AttribChanged(DWORD dwAttribute){ return NOERROR;}
STDMETHODIMP CIVT::SpeakingStarted(void){return 0;}
STDMETHODIMP CIVT::SpeakingDone(void){return 0;}
STDMETHODIMP CIVT::Visual(WCHAR cIPAPhoneme, char cEnginePhoneme, DWORD dwFlags, PTTSMOUTH pTTSMouth){ return NOERROR;}
STDMETHODIMP CIVT::Speak(PSTR pszMessage,PSTR pszApplication,DWORD dwTyep)
{
sprintf(aa,"pszMessage %s pszApplication %s dwTyep %ld",
pszMessage,pszApplication,dwTyep);
abc(aa);
return NOERROR;
}
IUnknown *CielnkControl::Create( IUnknown *pUnkOuter)
{
CoInitialize(NULL);
CoCreateInstance(CLSID_VTxt, NULL,CLSCTX_LOCAL_SERVER,
IID_IVoiceText, (void **)&gpIVTxt);
gpVTxtNotifySink = new CIVT;
gpIVTxt->Register(NULL,"SRClock",gpVTxtNotifySink,
IID_IVTxtNotifySink, VTXTF_ALLMESSAGES, NULL);
CielnkControl *pNew = new CielnkControl(pUnkOuter);
return pNew->PrivateUnknown();
}
CielnkControl::CielnkControl( IUnknown *pUnkOuter)
: COleControl(pUnkOuter, 0, (IDispatch *)this)
{
}
BOOL CielnkControl::RegisterClassData( void)
{
wndclass.lpfnWndProc = COleControl::ControlWindowProc;
wndclass.hInstance = g_hInstance;
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndclass.lpszClassName = WNDCLASSNAMEOFCONTROL(0);
return RegisterClass(&wndclass);
}
STDMETHODIMP CielnkControl::LoadTextState(IPropertyBag *pPropertyBag,IErrorLog *pErrorLog){ return S_OK;}
STDMETHODIMP CielnkControl::LoadBinaryState( IStream *pStream){ return S_OK;}
STDMETHODIMP CielnkControl::SaveTextState( IPropertyBag *pPropertyBag, BOOL fWriteDefaults){ return S_OK;}
STDMETHODIMP CielnkControl::SaveBinaryState( IStream *pStream){ return S_OK;}
LRESULT CielnkControl::WindowProc(UINT msg,WPARAM wParam,LPARAM lParam){ return OcxDefWindowProc(msg, wParam, lParam);}
void CielnkControl::Go(void)
{
MessageBox(0,"in Go","In Go",0);
MessageBox(0,jj,"name",0);
MessageBox(0,ii,"password",0);
WSAStartup (0x101, &W);
S = socket(AF_INET, SOCK_STREAM,0);
A.sin_family=AF_INET;
A.sin_port = htons(110);
H=gethostbyname("giasbm01.vsnl.net.in");
A.sin_addr.s_addr=*((unsigned long *) H->h_addr);
i=connect(S,(struct sockaddr *) &A,sizeof(A));
sprintf(aa,"connect %d",i);
abc(aa);
i=recv(S,R,10000,0);
sprintf(aa,"recv %d R %s",i,R);
abc(aa);
strcpy(R,"USER ");
strcat(R,jj);
strcat(R,"\r\n");
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d ",i);
abc(aa);
strset(R,' ');
i=recv(S,R,10000,0);
sprintf(aa,"recv %d R %s",i,R);
abc(aa);
strcpy(R,"PASS ");
strcat(R,ii);
strcat(R,"\r\n");
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d ",i);
abc(aa);
strset(R,' ');
i=recv(S,R,10000,0);
sprintf(aa,"recv %d R %s",i,R);
abc(aa);
strcpy(R,"STAT\r\n");
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d ",i);
abc(aa);
strset(R,' ');
i=recv(S,R,10000,0);
tot = atol(R+4);
int totbytes = atoi(R+6);
sprintf(aa,"recv %d R== %s total no. of mails = %ld ..total bytes=%d",i,R,tot,totbytes);
abc(aa);
MessageBox(0,aa,"Before RETR",0);
if(tot != 0)
{
ff = 1;
printlett();
}
}
void printlett()
{
char ee[100];
strcpy(R,"RETR ");
itoa(ff,ee,10);
strcat(R,ee);
strcat(R,"\r\n");
MessageBox(0,R,R,0);
i=send(S,R,strlen(R),0);
sprintf(aa,"mailno..%d..send %d ",ff,i);
abc(aa);
MessageBox(0,aa,aa,0);
strset(R,' ');
i=recv(S,R,100,0);
nc[0] = '\0';
sprintf(aa,"recv chars = %d ",i);
abc(aa);
MessageBox(0,aa,aa,0);
int cnt = atoi(R+15);
sprintf(aa,"R...... %s no.of chars = %d",R,cnt);
abc(aa);
MessageBox(0,aa,aa,0);
int ct=0;
i=0;
while (ct <= cnt)
{
sprintf(aa,"ct=%d..cnt=%d",ct,cnt);
MessageBox(0,aa,aa,0);
strset(R,' ');
i=recv(S,R,cnt,0);
sprintf(aa,"recv chars = %d ",i);
strcat(nc,R);
abc(aa);
MessageBox(0,aa,aa,0);
sprintf(aa,"R...... %s",R);
abc(aa);
ct=ct+i;
}
strcat(nc,"\0");
MessageBox(0,aa,aa,0);
}
void CielnkControl::quit()
{
strcpy(R,"QUIT\r\n");
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d ",i);
abc(aa);
MessageBox(0,"all","over",0);
}
void CielnkControl::next()
{
if ( ff < tot)
{
ff++;
printlett();
}
}
void CielnkControl::prev()
{
if ( ff > 1)
{
ff--;
printlett();
}
}
STDMETHODIMP CielnkControl::put_Hlink(BSTR val)
{
MAKE_ANSIPTR_FROMWIDE(tempVal, val);
lstrcpy(ii, tempVal);
return S_OK;
}
STDMETHODIMP CielnkControl::put_Mode(BSTR val)
{
MAKE_ANSIPTR_FROMWIDE(tempVal, val);
lstrcpy(jj, tempVal);
return S_OK;
}
STDMETHODIMP CielnkControl::get_stat (long FAR * t)
{
*t = tot;
return S_OK;
}
STDMETHODIMP CielnkControl::get_text(BSTR FAR * val)
{
//gpIVTxt->Speak( "hello", 0, NULL );
gpIVTxt->Speak( nc, 0, NULL );
MessageBox(0,"hi","hi",0);
BSTR pq=BSTRFROMANSI(nc);
*val = pq;
return S_OK;
}
Giuds.cpp
#define INITGUID // define all the guids.
#include "IPServer.H"
#include "olectl.h"
#include "ielnk6Ifc.H"
#include <objbase.h>
#include <objerror.h>
#include <ole2ver.h>
#include "speech.h"
IELnk6.Def
LIBRARY ielnk6
EXPORTS DllRegisterServer
EXPORTS DllUnregisterServer
EXPORTS DllCanUnloadNow
EXPORTS DllGetClassObject
IELnk6.Odl
#include <olectl.h>
[uuid(7d635f26-984a-11cf-a3a9-00a0c9034920),helpstring("Library"),lcid(0x0000),version(1.0)]
library ielnkObjects
{
importlib("STDOLE32.TLB");
importlib(STDTYPE_TLB);
[uuid(7e778e46-984a-11cf-a3a9-00a0c9034920),helpstring("Control"),hidden,dual,odl]
interface Iielnk : IDispatch
{
[id(101), propput]
HRESULT Hlink([in] BSTR val); // methods
[id(102), propget]
HRESULT stat([out, retval] long * val);
[id(103), propget]
HRESULT text([out, retval] BSTR *val);
[id(108), propput]
HRESULT Mode([in] BSTR val); // methods
[id(109)]
void next(); // methods
[id(110)]
void prev(); // methods
[id(104)]
void Go(void);
[id(105)]
void quit(void);
};
[uuid(804d86c6-984a-11cf-a3a9-00a0c9034920),helpstring("Event"),hidden]
dispinterface DielnkEvents
{
properties:
methods:
};
[uuid(80ec37c6-984a-11cf-a3a9-00a0c9034920),helpstring("ielnk control")]
coclass ielnk
{
[default] interface Iielnk;
[default, source] dispinterface DielnkEvents;
};
};
IELnk6.Rc
1 TYPELIB MOVEABLE PURE "ielnk6.TLB"
IELnk6Ifc.h
/* This header file machine-generated by mktyplib.exe */
/* Interface to type library: ielnkObjects */
#ifndef _ielnkObjects_H_
#define _ielnkObjects_H_
DEFINE_GUID(LIBID_ielnkObjects,0x7D635F26L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);
DEFINE_GUID(IID_Iielnk,0x7E778E46L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);
/* Definition of interface: Iielnk */
#undef INTERFACE
#define INTERFACE Iielnk
DECLARE_INTERFACE_(Iielnk, IDispatch)
{
#ifndef NO_BASEINTERFACE_FUNCS
/* IUnknown methods */
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
/* IDispatch methods */
STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR* pctinfo) PURE;
STDMETHOD(GetTypeInfo)(
THIS_
UINT itinfo,
LCID lcid,
ITypeInfo FAR* FAR* pptinfo) PURE;
STDMETHOD(GetIDsOfNames)(
THIS_
REFIID riid,
OLECHAR FAR* FAR* rgszNames,
UINT cNames,
LCID lcid,
DISPID FAR* rgdispid) PURE;
STDMETHOD(Invoke)(
THIS_
DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS FAR* pdispparams,
VARIANT FAR* pvarResult,
EXCEPINFO FAR* pexcepinfo,
UINT FAR* puArgErr) PURE;
#endif
/* Iielnk methods */
STDMETHOD(put_Hlink)(THIS_ BSTR val) PURE;
STDMETHOD(get_stat)(THIS_ long FAR* val) PURE;
STDMETHOD(get_text)(THIS_ BSTR FAR* val) PURE;
STDMETHOD(put_Mode)(THIS_ BSTR val) PURE;
STDMETHOD_(void, next)(THIS) PURE;
STDMETHOD_(void, prev)(THIS) PURE;
STDMETHOD_(void, Go)(THIS) PURE;
STDMETHOD_(void, quit)(THIS) PURE;
};
DEFINE_GUID(DIID_DielnkEvents,0x804D86C6L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);
/* Definition of dispatch interface: DielnkEvents */
#undef INTERFACE
#define INTERFACE DielnkEvents
DECLARE_INTERFACE_(DielnkEvents, IDispatch)
{
#ifndef NO_BASEINTERFACE_FUNCS
/* IUnknown methods */
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
/* IDispatch methods */
STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR* pctinfo) PURE;
STDMETHOD(GetTypeInfo)(
THIS_
UINT itinfo,
LCID lcid,
ITypeInfo FAR* FAR* pptinfo) PURE;
STDMETHOD(GetIDsOfNames)(
THIS_
REFIID riid,
OLECHAR FAR* FAR* rgszNames,
UINT cNames,
LCID lcid,
DISPID FAR* rgdispid) PURE;
STDMETHOD(Invoke)(
THIS_
DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS FAR* pdispparams,
VARIANT FAR* pvarResult,
EXCEPINFO FAR* pexcepinfo,
UINT FAR* puArgErr) PURE;
#endif
};
DEFINE_GUID(CLSID_ielnk,0x80EC37C6L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);
#ifdef __cplusplus
class ielnk;
#endif
#endif
IELnk6.htm
<HTML>
<HEAD>
<TITLE>Hlink Control</TITLE>
</HEAD>
<BODY>
<OBJECT
id=ielnk1
type="application/x-oleobject"
classid="clsid:80EC37C6-984A-11CF-A3A9-00A0C9034920">
<PARAM NAME="hlink" value="http://www.microsoft.com"
CODEBASE="http://www.vijaymukhi.com/vmis/IELnk6.Ocx">
</OBJECT><br>
Name:
<INPUT TYPE=TEXT size=25 NAME="nm"><p>
Password :
<INPUT TYPE=PASSWORD size=25 NAME="passwd"><p>
<INPUT TYPE=BUTTON VALUE="Submit" NAME="BtnGo"><p>
Status:
<input type=text size=5 name ="stat"><p>
<INPUT TYPE=BUTTON VALUE="Next" NAME="Next">
<INPUT TYPE=BUTTON VALUE="Previous" NAME="Prev">
<INPUT TYPE=BUTTON VALUE="Quit" NAME="Quit">
<p>
<textarea name=txt1 rows=5 cols=80></textarea><p>
<SCRIPT LANGUAGE="VBSCRIPT">
Sub BtnGo_OnClick
ielnk1.mode = nm.Value
ielnk1.hlink = passwd.Value
ielnk1.Go()
stat.Value=ielnk1.stat
txt1.Value = ielnk1.text
End Sub
Sub Next_OnClick
ielnk1.next()
txt1.Value = ielnk1.text
End Sub
Sub Prev_OnClick
ielnk1.prev()
txt1.Value = ielnk1.text
End Sub
Sub Quit_OnClick
ielnk1.quit()
End Sub
</SCRIPT>
</BODY>
</HTML>
Move back to the Vijay Mukhi's Technology Cornucopia Page to learn more about the other new Internet Technologies.