Makefile
USE_BASECTL=1
Proj = IELnk4
# 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)\IELnk4Ifc.H
$(ObjDir)\IELnk4.Obj: $(@B).Cpp c:\inetsdk\samples\basectl\Include\IPServer.H \
c:\inetsdk\samples\basectl\Include\LocalSrv.H \
$(@D)\IELnk4Ifc.H c:\inetsdk\samples\basectl\Include\CtrlObj.H \
c:\inetsdk\samples\basectl\Include\Globals.H \
c:\inetsdk\samples\basectl\Include\Util.H \
ielnk4.cpp
#define INITOBJECTS // define the descriptions for our objects
#include "IPServer.H"
#include "ielnk4Ifc.H"
#include "CtrlObj.H"
#include "Globals.H"
#include "Util.H"
#include <stdio.h>
#include <windows.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[6000];int i;struct hostent *H;
char R[10000];int p;
char q[10],r[10];char cc[10000];
int ff=1;long tot,tot1,tot2;
char nc[10000];char pq[100];
void printnews();
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_index1)(THIS_ long FAR* val) ;
STDMETHOD(get_index2)(THIS_ long FAR* val) ;
STDMETHOD(get_text)(THIS_ BSTR FAR *val);
STDMETHOD_(void, Go)(THIS) ;
STDMETHOD_(void,quit)(THIS);
STDMETHOD_(void,next)(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_GUID(CLSID_ielnkGeneralPage, 0x8221f8a0, 0x984a, 0x11cf, 0xa3, 0xa9, 0x00, 0xa0, 0xc9, 0x03, 0x49, 0x20);
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];
IUnknown *CielnkControl::Create( IUnknown *pUnkOuter)
{
abc(" CielnkControl::Create");
CielnkControl *pNew = new CielnkControl(pUnkOuter);
return pNew->PrivateUnknown();
}
CielnkControl::CielnkControl( IUnknown *pUnkOuter)
: COleControl(pUnkOuter, 0, (IDispatch *)this)
{
abc(" CielnkControl::CielnkControl");
}
BOOL CielnkControl::RegisterClassData( void)
{
abc("CielnkControl::RegisterClassData");
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)
{
abc("CielnkControl::Go");
MessageBox(0,"in Go","In Go",0);
MessageBox(0,jj,"name",0);
MessageBox(0,ii,"group name",0);
WSAStartup (0x101, &W);
S = socket(AF_INET, SOCK_STREAM,0);
A.sin_family=AF_INET;
A.sin_port = htons(119);
H=gethostbyname(jj);
sprintf(aa,"%s..",H->h_name);
abc(aa);
MessageBox(0,aa,aa,0);
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);
MessageBox(0,aa,aa,0);
i=recv(S,R,10000,0);
sprintf(aa,"recv %d R %s",i,R);
abc(aa);
MessageBox(0,aa,aa,0);
strcpy(R,"GROUP ");
strcat(R,ii);
strcat(R,"\r\n");
sprintf(aa,"R=%d..",strlen(R));
MessageBox(0,R,aa,0);
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d..",i);
abc(aa);
i=recv(S,cc,sizeof(cc),0);
sprintf(aa,"%d..%s",i,cc);
abc(aa);
MessageBox(0,aa,aa,0);
int ct1=0,ct;
tot=atol(cc+4);
sprintf(aa,"atol..tot=%ld ",tot);
MessageBox(0,aa,aa,0);
for (ct = 4; cc[ct] !=' ';ct++);
ct++;
for (ct1=0;cc[ct] !=' ';ct++,ct1++)
q[ct1]=cc[ct];
q[ct1]='\0';
tot1=atol(q);
sprintf(aa,"temp %s..index1..%ld",q,tot1);
MessageBox(0,aa,aa,0);
ct++;
for (ct1=0;cc[ct] !=' ';ct++,ct1++)
r[ct1]=cc[ct];
r[ct1]='\0';
tot2=atol(r);
sprintf(aa,"temp %s..index2",r,tot2);
MessageBox(0,aa,aa,0);
strcpy(R,"ARTICLE ");
strcat(R,q);
strcat(R," \r\n");
MessageBox(0,R,R,0);
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d..",i);
abc(aa);
MessageBox(0,"Before printnews","news",0);
printnews();
MessageBox(0,"hi in client","over",0);
}
void printnews()
{
MessageBox(0,aa,"ARTICLE",0);
strset(R,' ');
strset(nc,' ');
i=recv(S,R,10000,0);
strcpy(nc,R);
MessageBox(0,R,"R",0);
}
void CielnkControl::quit()
{
abc("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);
}
STDMETHODIMP CielnkControl::put_Hlink(BSTR val)
{
abc("CielnkControl::put_Hlink");
MAKE_ANSIPTR_FROMWIDE(tempVal, val);
lstrcpy(ii, tempVal);
return S_OK;
}
STDMETHODIMP CielnkControl::put_Mode(BSTR val)
{
abc("CielnkControl::put_Mode");
MAKE_ANSIPTR_FROMWIDE(tempVal, val);
lstrcpy(jj, tempVal);
return S_OK;
}
STDMETHODIMP CielnkControl::get_stat (long FAR * t)
{
abc("CielnkControl::get_stat");
MessageBox(0,"get_stat","get_stat",0);
*t = tot;
return S_OK;
}
STDMETHODIMP CielnkControl::get_index1 (long FAR * t)
{
abc("CielnkControl::get_index1");
MessageBox(0,"get_index1","get_index1",0);
*t = tot1;
return S_OK;
}
STDMETHODIMP CielnkControl::get_index2 (long FAR * t)
{
abc("CielnkControl::get_index2");
MessageBox(0,"get_index2","get_index2",0);
*t = tot2;
return S_OK;
}
STDMETHODIMP CielnkControl::get_text(BSTR FAR *val)
{
BSTR pq=BSTRFROMANSI(nc);
*val=pq;
return S_OK;
}
void CielnkControl::next()
{
strcpy(R,"NEXT\r\n");
i=send(S,R,strlen(R),0);
MessageBox(0,"next","next",0);
printnews();
}
Guids.cpp
#define INITGUID // define all the guids.
#include "IPServer.H"
#include "olectl.h"
#include "ielnk4Ifc.H"
ielnk4.def
LIBRARY ielnk4
EXPORTS DllRegisterServer
EXPORTS DllUnregisterServer
EXPORTS DllCanUnloadNow
EXPORTS DllGetClassObject
ielnk4.odl
#include <olectl.h>
[uuid(7d635f24-984a-11cf-a3a9-00a0c9034920),helpstring("Library"),lcid(0x0000),version(1.0)]
library ielnkObjects
{
importlib("STDOLE32.TLB");
importlib(STDTYPE_TLB);
[uuid(7e778e44-984a-11cf-a3a9-00a0c9034920),helpstring("Control"),hidden,dual,odl]
interface Iielnk : IDispatch
{
[id(101), propput]
HRESULT Hlink([in] BSTR val); // methods
[id(102), propput]
HRESULT Mode([in] BSTR val); // methods
[id(103), propget]
HRESULT stat([out, retval] long * val);
[id(104), propget]
HRESULT index1([out, retval] long * val);
[id(105), propget]
HRESULT index2([out, retval] long * val);
[id(108), propget]
HRESULT text([out, retval] BSTR *val);
[id(106)]
void Go(void);
[id(107)]
void quit(void);
[id(109)]
void next(void);
};
[uuid(804d86c4-984a-11cf-a3a9-00a0c9034920),helpstring("Event"),hidden]
dispinterface DielnkEvents
{
properties:
methods:
};
[uuid(80ec37c4-984a-11cf-a3a9-00a0c9034920),helpstring("ielnk control")]
coclass ielnk
{
[default] interface Iielnk;
[default, source] dispinterface DielnkEvents;
};
};
ielnk4.rc
1 TYPELIB MOVEABLE PURE "ielnk4.TLB"
IELnk4Ifc.h
( This file is created by mktyplib )
/* This header file machine-generated by mktyplib.exe */
/* Interface to type library: ielnkObjects */
#ifndef _ielnkObjects_H_
#define _ielnkObjects_H_
DEFINE_GUID(LIBID_ielnkObjects,0x7D635F24L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);
DEFINE_GUID(IID_Iielnk,0x7E778E44L,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(put_Mode)(THIS_ BSTR val) PURE;
STDMETHOD(get_stat)(THIS_ long FAR* val) PURE;
STDMETHOD(get_index1)(THIS_ long FAR* val) PURE;
STDMETHOD(get_index2)(THIS_ long FAR* val) PURE;
STDMETHOD(get_text)(THIS_ BSTR FAR* val) PURE;
STDMETHOD_(void, Go)(THIS) PURE;
STDMETHOD_(void, quit)(THIS) PURE;
STDMETHOD_(void, next)(THIS) PURE;
};
DEFINE_GUID(DIID_DielnkEvents,0x804D86C4L,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,0x80EC37C4L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);
#ifdef __cplusplus
class ielnk;
#endif
#endif
ilenk4.htm
<HTML>
<HEAD>
<TITLE>Hlink Control</TITLE>
</HEAD>
<BODY>
<OBJECT id=ielnk1 type="application/x-oleobject" classid="clsid:80EC37C4-984A-11CF-A3A9-00A0C9034920"
CODEBASE="http://www.vijaymukhi.com/vmis/IELnk4.Ocx">
<PARAM NAME="hlink" value="www.microsoft.com">
</OBJECT>
Enter NNTP Server Name:
<INPUT TYPE=TEXT size=25 NAME="nm"><p>
Enter the NewsGroup :
<INPUT TYPE=Text size=25 NAME="ngrp"><p>
<INPUT TYPE=BUTTON VALUE="Send" NAME="BtnGo"><p>
No. of Messages :
<input type=text size=5 name ="stat">
Begin Index No.
<input type=text size=5 name ="ind1">
End Index No.
<input type=text size=5 name ="ind2"><p>
<textarea name=txt1 rows=5 cols=80></textarea><p>
<INPUT TYPE=BUTTON VALUE="Next" NAME="Next">
<INPUT TYPE=BUTTON VALUE="Quit" NAME="Quit">
<p>
<SCRIPT LANGUAGE="VBSCRIPT">
Sub BtnGo_OnClick
ielnk1.mode = nm.Value
ielnk1.hlink = ngrp.Value
ielnk1.Go()
stat.Value=ielnk1.stat
ind1.Value=ielnk1.index1
ind2.Value=ielnk1.index2
txt1.Value = ielnk1.text
End Sub
Sub Next_OnClick
ielnk1.next()
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.