前几篇设置了NDK,配置了IP,那么接下来就要配置Telnet服务了。
记得前面的配置都使用了相应的结构体,Telnet的配置也是一样,使用了CI_SERVICE_TELNET结构体,这个结构体与配置DHCP时使用的结构很像。
可以看到它有成员的第一个结构体与NTPARAM_DHCP结构体是一样的,不同的是第二个成员,这里变成了一个NTPARAM_TELNET结构体。
那么NTPARAM_TELNET结构体的定义如下:
MaxCon:telnet会话的最大数目,范围是1到24。
Port:Telnet使用的TCP端口,Telnet默认是0。
(*Callback)(PSA),从名字上看就是Telnet的回调函数了。
- bzero(&telnet, sizeof(telnet));//将telnet清0
- telnet.cisargs.IPAddr = INADDR_ANY;
- telnet.cisargs.PCBSrv = &ServiceReport;
- telnet.param.MaxCon = 2;
- telnet.param.Callback = &ConsoleOpen;
- CfgAddEntry(hCfg, CFGTAG_SERVICE, CFGITEM_SERVICE_TELNET, 0, sizeof(telnet), (UINT8 *)&telnet, 0);
可以看到Telnet的回调函数是ConsoleOpen。当在终端使用Telnet服务时,通过调用ConsoleOpen 函数进 入Telnet服务, 该函数为telnet.param.CallBack的参数。
函数的原型为:
- SOCKET ConsoleOpen( PSA pClient )
- {
- HANDLE fd1, fd2;
- // Create the local pipe - abort on error
- IF( pipe( &fd1, &fd2 ) != 0 )
- return( INVALID_SOCKET );
- // If an instance is already running, abort
- if( hConsole )
- {
- // If the console is already running, return a quick message and
- // close the pipe.
- send( fd2, StrBusy, strlen(StrBusy), 0 );
- fdClose( fd2 );
- }
- else
- {
- // Create the console thread
- hConsole = TaskCreate( console, "Console", OS_TASKPRINORM, 0x1000,
- (UINT32)fd2, (UINT32)pClient, 0 );
- // Close the pipe and abort on an error
- if( !hConsole )
- {
- send( fd2, StrError, strlen(StrError), 0 );
- fdClose( fd2 );
- }
- }
- // Return the local fd
- return( fd1 );
- }
由于接下来的几篇都是NDK的讲解与使用方法的说明,在NDK的最后一篇将把所有的源码与二进制文件上传。