home *** CD-ROM | disk | FTP | other *** search
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <proto/socket.h>
- #include <netdb.h>
- #include <errno.h>
- #include <dos/dos.h>
- #include <dos/dostags.h>
- #include <proto/dos.h>
- #include <proto/exec.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
-
- struct Library *SocketBase=NULL;
- #define bzero(base,n) memset(base,0,n)
- #define bcopy(from,to,n) memcpy(to,from,n)
-
- void Quit(int retcode)
- {
-
- if (SocketBase) CloseLibrary(SocketBase);
- exit(retcode);
- }
-
- struct Process *MyCreateNewProcTags(ULONG Tag0,...)
- {
- return CreateNewProc((struct TagItem *)&Tag0);
- }
-
- void main(void)
- {
- struct servent *sp;
- struct sockaddr_in ServAddr;
- int Socket,SubSock;
- LONG SubSockID;
- int WaitSig;
- static char ArgStr[200];
- BPTR TelNetProg;
- long Len;
-
- SocketBase=OpenLibrary("bsdsocket.library",2);
-
- if (!SocketBase) Quit(20);
-
- sp=getservbyname("telnet","tcp");
- if (!sp) Quit(21);
-
- bzero(&ServAddr,sizeof(ServAddr));
- ServAddr.sin_port=sp->s_port;
- ServAddr.sin_addr.s_addr=htonl(INADDR_ANY);
- ServAddr.sin_family=AF_INET;
- ServAddr.sin_len=sizeof(ServAddr);
- Socket=socket(AF_INET,SOCK_STREAM,0);
- if (Socket < 0) Quit(22);
- bind(Socket,&ServAddr,sizeof(ServAddr));
- listen(Socket,5);
- WaitSig=AllocSignal(-1);
- if (WaitSig==-1) Quit(23);
-
-
- for (;;) {
- Len=sizeof(ServAddr);
- SubSock=accept(Socket,&ServAddr,&Len);
- if (SubSock < 0) {
- if (Errno()==EINTR) {
- CloseSocket(Socket);
- Quit(0);
- }
- continue;
- }
- SetSignal(0,(1<<WaitSig)); /* unset WaitSig signal */
- SubSockID=ReleaseSocket(SubSock,UNIQUE_ID);
- sprintf(ArgStr,"%u %u %u",(unsigned long)SubSockID,(unsigned long)WaitSig,(unsigned long)FindTask(NULL));
- TelNetProg=LoadSeg("tnserv:TelnetGetty");
- if (!TelNetProg) TelNetProg=LoadSeg("TelnetGetty/TelnetGetty");
- if (!TelNetProg) TelNetProg=LoadSeg("TelnetGetty");
- if (!TelNetProg) TelNetProg=LoadSeg("AmiTCP:Bin/TelnetGetty");
- if (TelNetProg) {
- if (MyCreateNewProcTags(NP_Seglist,TelNetProg,
- NP_Name,"telnet login",
- NP_Arguments,ArgStr,
- NP_StackSize,12000,
- NP_FreeSeglist,TRUE,
- TAG_END)) {
-
- /*CreateProc("telnet login",0,TelNetProg,12000);*/
- Wait(1<<WaitSig); /* Wait for new proc to start up */
- }
- }
- }
-
- }
-