Tv:

R-CODE VXe̓AIBOp[XeBbN owner.txt ꍇA
lbg[N̐ڑ NsmF؂KvɂȂ܂B

NsmAuthorize()֐́ANsmF؂KvȂƂł R-CODE̖LANR\[
g悤ɂWindowsp̊֐łB


OWNER.TXTɂ
F؂sɂ͈ȉ̃pXOWNER.TXTu܂B

pX : \OPEN-R\APP\DATA\P\OWNER.TXT

ݒ
--------------------------------
OWNER=aibo
OWNER_PASSWORD=aibo
--------------------------------


------------------------------------------------------------------------

   int NsmAuthorize ( char *HostName, char *OwnerID, char *Password )

      HostName    AIBÕzXgl[i . ؂IPAhX\Lj
          OwnerID     I[i[IDiőWj
          Password    pX[hiőWj

   ߒl   0           Fؐ
          1           F؎sipX[hႢj
          2           IPAhXs
          3           I[i[IDs
          4           X|Xf[^s
          11          T[rXʃG[
          12          T[rX
          13          T[rXgp
          -1          socket̍쐬Ɏs
          -2          connectɎs
          -3          recv()G[
          -4          send()G[

------------------------------------------------------------------------

RComm ɐڑꍇAF؂ȗ郂[hł\̂
Ƃɂ|[g 21002 ɂȂł݂B

F؂Kvꍇɂ ACK ('\006') ԂB
(ACK ԂOɃwb_[񂪑B)

F؂Kvȏꍇ NAK ('\025') Ԃ̂ŁAxڑf
NsmAuthorize() sAēxڑ݂B

------------------------------------------------------------------------

gpF

static char *HostName = "192.168.0.10";
static char *UserID   = "aibo";
static char *Password = "aibo";

int OpenWLAN () // WLAN ڑs֐
{
    struct sockaddr_in inet_addr;
    int    fd;
    int    nsm;

Top:

    // 21002 ɂȂł݂
    memset( (char*)&inet_addr, 0, sizeof(inet_addr) );
    inet_addr.sin_family = AF_INET;
    sscanf( HostName, "%d.%d.%d.%d",
            &(inet_addr.sin_addr.S_un.S_un_b.s_b1),
            &(inet_addr.sin_addr.S_un.S_un_b.s_b2),
            &(inet_addr.sin_addr.S_un.S_un_b.s_b3),
            &(inet_addr.sin_addr.S_un.S_un_b.s_b4) );
    inet_addr.sin_port   = htons((u_short)21002);
    if( (fd = socket( AF_INET, SOCK_STREAM, 0 )) < 0 )
    {
        return 0;
    }
    if( connect( fd, (struct sockaddr *)&inet_addr, sizeof(inet_addr) ) < 0 )
    {
        closesocket( fd );
        return 0;
    }

    // ACK  NAK ܂ő҂
    nsm = 0;
    while(1)
    {
        char ch;
        int  cc = recv( fd, &ch, 1, 0 );
        if( cc < 0 )
        {
            break;
        }
        if( cc > 0 )
        {
            if( ch == '\006' ) // ACK
            {
            	nsm = 1;
                break;
            }
            if( ch == '\025' ) // NAK
            {
                closesocket( fd );
                fd  = 0;
                nsm = 2;
                break;
            }
        }
    }

    if( nsm == 2 ) // F؂KvH
    {
        int rc;
        Sleep( 300L );
        rc = NsmAuthorize( HostName, UserID, Password );
        if( rc != 0 )
        {
            // F؂Ɏs
            return 0;
        }
        Sleep( 300L );
        goto Top; // Đڑ
    }

    return fd;
}

