
    Universal Service Protocol (USP)

1.  

     USP     
          
     (, , , , ). 
         . 
      :        
          .  
         ,   
         ,    
     .   ,
      USP,      .  ,
          .  USP
        ,  RPC,MIME,HTTP,SMTP,
    FTP,POP3,        
         ,   
      .     
         ,   
      .     USP  
            NT (
    )   Win95/98/ME (  ).  
           
     USP ,      
     ,       USP  
        .
 
2.  

        ( ) 
     USP    .  
         -   
     USP    , 
            
       .      ,
      /    ,
        ,    ,
              
       . (mailto:Timur@niist.ntu-kpi.kiev.ua)
           
    . ,  ,  ,    
         - , 
       .     ( )
            
       USP.     
       (   ), 
              ,
           
       .

2.1.  USP  DCOM/MIDAS

    -  ;
    -   ;
    -        
      ,   EXE    .  
       dcomncfg, BDEAdmin, SetNet   ;
    -        
             
    -    IP       
            ;
    -    ;
    -     ,    
            ;
    -      Telnet ( 
           ), ..
        ;
    -  :       
      ,       
       ,      
       ;
    -    ,  MIDAS     .
    
2.2.      USP  XML

    XML -   ,   ,   
       HTTP (   TCP) .
    XML       
    ,  USP     
     :   ,
      ,   , , 
      .

        USP    XML,     
    USP   . XML   SGML/HTML
    ,       ,
            
    .

2.2.1.      XML  USP.

     
    XML: <FieldName>Value</FieldName>
    USP: FieldName[Value]

     
    XML: <ListName-list>
         <ListItem1 id="1">
         ...fields...
         </ListItem1>  
         <ListItem2 id="2">
         ...fields...
         </ListItem2>  
         </ListName-list>
    USP: Part[ListName] Type[array] Count[2]
         ID[1] ...fields...
         ID[2] ...fields...
         Endpart[ListName]

     
    XML: <font color="white" name="Arial">Black</font>
    USP: Font[White,Arial,Blask]

       ()
    XML: <File>Name</File> <![CDATA]
         ...data...
         ]]>.
    USP: Part[name] Type[file]
         ...data...
         Endpart[name]

2.2.2.     XML  USP.

    ( XML     " XML - 
    "  )

     ( )

    XML: <?xml version="1.0"?>
         <list_of_items>
         <item id="1"><first/></item>
         <item id="2"></item>
         <item id="3"></item>
         <item id="4"><last/></item>
         </list_of_items>

    USP: Part[List] Type[array] Count[4]
         Item[]
         Item[]
         Item[]
         Item[]
         Endpart[List]

      

    XML: <country id="Russia">
         <cities-list>
         <city>
         <title></title>
         <state>Siberia</state>
         <universities-list>
         <university id="2">
         <title>  
                </title>
         <noprivate/>
         <address URL="www.nstu.ru"/>
         <description>  </description> 
         </university>  
         <university id="2">
         <title>  </title>
         <noprivate/>
         <address URL="www.nsu.ru"/>
         <description>  </description> 
         </university>  
         </universities-list>
         </city>
         </cities-list>
         </country>

    USP: Part[Russia] Type[multipart] Count[2]
           Part[] Type[multipart]
             State[Siberia]
             Part[1] Type[plain]
               Name[   ]
               URL[www.nstu.ru]
               Description[  ]
             Endpart[1]
             Part[2] Type[plain]
               Name[  ]
               URL[www.nsu.ru]
               Description[  ]
             Endpart[2]
           Endpart[]
         Endpart[Russia]

2.3.  USP
    
    -   . ,     
         ;
    -      ;
    -   ,     ,
        .
                                                            
3.      USP

        :   
        .     
           
          .  ,
           , 
     ,      SQL
       ,    
         . 
      ,        
          ,   
    -     . 
         ,   
     .     
            
    ,       
    .

            
      .     
          ,  
    .       
    ,     .   
      ,      
            ,  
           .

3.1.     


        ,   
        (, , ,  ,
    ).        ().
         (, ,
    , , )     .

    ----------------------
    | RAM, Disks, CPU,   |       <- Resouces of server
    | DataBases, Devices |
    ----------------------
        /\        \/

    +-[F1]  +-[F1]  +-[F1]       <-\
    |-[F2]  |-[F2]  |-[F2]         |  Functions
    | ...   | ...   | ...          |  of services
    |-[FN]  |-[FN]  |-[FN]       <-/
    |       |       |
    [SI1] [SI2] ... [SIN]        <- Service Interfaces
        \    |    /
         ---------  
         |  USP  |               <- RPC
         ---------
        /    |    \
      [P1] [P2] ... [PN]         <- Ports (Sockets)
         \   |    /
          -------      -------                         --------------
          | TCP |      | UDP |   <- Transport          | USP Client |
          -------      -------                         --------------
                \      /                                     |
                 ------                                  ----------
                 | IP |          <- Internet             | TCP/IP | 
                 ------                                  ---------- 
                   |                                         |    
                --------                                  --------
                | ENET |         <- LAN                   | ENET |
                --------                                  --------  
                   |                                         |
     --------------o---------------Ethernet------------------o--------
      

4.      USP

          , ..  
     RPC.       .  
          
     . .. USP   ,  
        ,      
    .

     USP       TCP ,  
           
    .    TCP ,   USP
    ,      :
    #46#13#10 (..    ). USP    
       .       
    "Name[value]".       
    #13#10 ( ).    
      (   )   
    ,   ,   Base64   
    .   ,    ,    #32
     #255  : #35, #36, #37, #38, #40, #41, #44, #91,
    #93.     : "$"   
      ,   48.    
          
    .         
    .

         : ,   .
         , ..  
       ,      
         .

4.1.  

        :   . 
        ,   
         ,   
    .      'Res',   
       .    
       'OK',     
    'ERR_Message'.   'Model',    
    : 'small'  'large',   ,   
        .    
        ,     
       .     
       .

4.1.1   

        ,     
         ( 'Part'),  
    ( 'Type'),  -    ( 'Count'). 
       4 : 'plain', 'multipart', 'array',
    'file','table'.  'Count' ,    'Type'
      'multipart'  'array'.

      'plain'       
     .      .

      'multipart'     
       'Count' - .  
      ,     
     .

      'array'   ,     
       .     
     ,    .

      'file'      
    ,    Base64,    
          POP3  SMTP, 
          FIDO.

      'table'     , 
        'array',      
      ,   'table'     
     ,     .  'table' 
      -     - 
    ,   'array'    -  
     .

4.1.2    

    Res[OK/ERR_Message] Model[small/large]
    Part[name] Type[plain/multipart/array/file] <Count[N]>
      <...fields...>
    Endpart[name].

    ( '/'-,  '<>' -  .)

4.1.3.  ( )  

            
    .

    Res[OK] Model[small]
    User[Vasia Pupkin] Email[vasia@pupkin.com]
    Usertype[extended_user] State[Connected].

4.1.4.    

    Res[OK] Model[large]
    Part[users] Type[array] Count[3]
      User[Rulez] Email[rulez@4ever.com] State[Connected]
      User[Bugs] Email[sometimes@bugs.net] State[Disconnected]
      User[Peace] Email[Peace@peace.org] State[Disconnected]
    Endpart[users].

4.1.5.     

      ,      
      .

    Res[OK] Model[large]
    Part[letter] Type[multipart] Count[3]
      From[Timur Shemsedinov, Timur@niist.ntu-kpi.kiev.ua]
      To[Tamagochi, dt@zhadum.alfacom.net]
      Subject[Test message]
      Date[4.Sep.2000] Time[2:41]
      Part[path] Type[array] Count[2]
        Serv[niist] Date[4.Sep.2000] Time[2:35] From[10.18.8.51]
        Serv[ws1] Date[4.Sep.2000] Time[2:41] From[10.255.18.1]
      Endpart[path]
      Part[message] Type[plain] 
           . . .
      Endpart[message]
      Part[Attaced_file.ext] Type[file]
        DDWShXSZLDC285CipoJD5ig0niPrA6w/rMkm9xkrD0FKhSE4YRwkc9vWCvDv
        70KN/a+DdIEjQKRC8QIJSoEswDhWmEXovWAwN4HH/z+ph+fBwJj1XdQzO7AP
        LH8sSjks11We6JwELndDdFDqRsZJ7QshPkU1kwrd+snIqsfo+gKkL3whWMy6
        yOeGgzwkXGulI6AMBujHA5lZvNg3SBD0yVxhdP==
      Endpart[Attaced_file.ext]
    Endpart[letter].

4.1.6.   

    Part[query] Type[table] Count[3]
      [User,Email,State]
      [Rulez,rulez@4ever.com,Connected]
      [Bugs,sometimes@bugs.net,Disconnected]
      [Peace,Peace@peace.org,Disconnected]
    Endpart[query]

4.2.  

          ,  
          .
           ( 
             ),
          .

           
      ,       
       .     
          ,     
          :

        FunctionName(par1,...,parN).

            . 
       ,     (. 
     4).       
      (,     
       )     '$$',
       ,       
     ,      
     .

4.3.  

           
           
        ,   
         ,   
             
        ,  
    .

          .  
      ,    ,   ,
    ,   .    :
    "Event[Name] Model[small/large]" (.   4.5.1. 
     ).

4.4. 

          , 
            
     ( )   . 
        USP   
    .   - ,    
    : Res,Model,Servername,Time,Date,Owner,Services.  
       ,    
    , ..         .
      ,       :

        SelectService(ServiceName,UserName,Password).

          , 
           , 
            IP .
        ('S>'-Server,'C>'-Client):

        S> Res[OK] Model[small]
        S> Servername[First USP Server] Owner[niist]
        S> Time[8:11] Date[4.Sep.1000] Services[OODB,RMS].

        C> SelectService(RA,Vasia,iampupkin).

        S> Res[OK].

            
    ,   "SelectService" ,   
      ,      
    .

4.5.     

          USP   
    ,       
        . , , 
     ,    
         .   
       .

4.5.1.      "Model"

           "Res" 
    ,    ,   "Model"  
    , ..      "small". 
    ,   "Res[OK] Model[small]."  
    "Res[OK].".   ,  ,    
         ,   
      : "Event[Name].".

4.5.2.     

            , 
      .     
     , ..        
     . ,  ,  
         Telnet , 
         .

4.5.3.      

       ,   
              
     .      N, 
           N+1 , 
          .  
        ,      
     , ..     
    .

     ,   :

        Res[OK] Model[large]
        Part[files] Type[array] Count[3]
          File[usp.exe] Size[370176] Descr[USP service for NT4]
          File[valid_ip.lst] Size[73] Descr[accesslist]
          File[accounts.ini] Size[378] Descr[users_groups_accounts]
        Endpart[files].

           :

        Res[OK] Model[large]
        Part[files] Type[array] Count[3]
          [File,Size,Descr]
          [usp.exe,370176,USP service for NT4]
          [valid_ip.lst,73,accesslist]
          [accounts.ini,378,users_groups_accounts]
        Endpart[files].

     - ,        
        ,     
     4    ,   
     . 

4.5.4.  

            ,
     ,   .  ,
         : "Field[val1,..,valN]".

5.    USP

           Delphi5 
     USP       :
    TPacket      ;
    TUSPServer       
     (    RPC    TCP
       ); TUSPUser   
        ,   
     RPC     (  );
    TUSPFunction       (
           );
    TUSPClient      
    ; TUSPEvent       
      (    
     ).

5.1.   ( )

        ,  
       (TDataModule). 
        .   
         TUSPServer 
      :
    ...
      TUSPServer     
    .   TUSPServer     RA,
         USP . 
       TUSPServer    TUSPUser
             
    .   TUSPUser    
    ,         
         .  
    TUSPServer    TUSPFunction   ,
     RPC .   ,   
      "OnCall"      
     TUSPUser,     ,
     .     
    USP     TPacket   (..  
        ),   .  
          -  
     ,   TUSPUser   ,  
          (   USP
    ).          
       ,     
    TUSPUser, ..   .  ,  
    TUSPUser      ,   
      TCP ,    , 
    ,        USP .
       ,    , 
         ,   
     ,     Telnet ,
     BackSpace ( #8),      
        . USP     
    ,    Telnet ,  ,  
      ,    LocalEcho.

5.2.   

           
      TUSPClient,    CallServ
        .   
      IP    RA:

        USPClient.SrvCall('AddIP',[EditIP.text]);

       ,     , 
          (  , 
    ).      
    .  TUSPClient   TPacket,
           :

        procedure TForm1.ButtonGetUsersClick(Sender: TObject);
        var PAK:TPacket; LI:TListItem; i:integer;
        begin
          Users.Items.Clear;
          PAK:=USPClient.SrvCall('GetUsers',[]);
          for i:=0 to PAK.SubCount-1 do with PAK.SubPackets[i] do begin
            LI:=Users.Items.Add;
            LI.Caption:=Fields['User'];
            LI.Subitems.Text:=Fields['IP']+#13#10+
              Fields['Service']+#13#10#13#10+Fields['Inc']+#13#10+
              Fields['Out']+#13#10+Fields['Socket'];
          end;
          PAK.Free;
        end;

     CallServ    TPacket    
     ,    , .  
           
      ,      ,    
       TPacket  ,  
    TUSPClient.

         TPacket ,  
    TPacket.Create(PacketText),   , ..
            
    ,        
    TPacket.SubPackets[num]  num -  ,  
        TPacket.  
          TPacket.Sub['SectionName']. 
       (    ) 
    TPacket.Fields['FieldName'].      .
         
    TPacket.CreateSubPacket(pTexp).     
     ( TPacket.Text)     
        .     
              .

        ,  ,    
       Base64Decode,    
    Base64Encode   .

7.     RA/USP.

    : GetIPs().
    :
        Res[OK] Model[large]
        Part[IPS] Type[plain]
          10.18.8.54
          10.18.8.52
          10.18.8.3
        Endpart[IPS].       
    :    IP    (AccessList).

    : AddIP(IPAddr).
    : Res[OK].
    :      AccessList.

    : DelIP(IPAddr).
    : Res[OK].
    :      AccessList.

    : GetLog().
    :
      Res[OK] Model[large]
      Part[LogFile] Type[plain]
        9/25/2000  20:30:38  10.18.8.51  Error #10053
        9/25/2000  20:30:44  10.18.8.51  connected
        9/25/2000  20:30:52  10.18.8.51  disconnected
      Endpart[Logfile].
    :    .

    : GetInfo().
    : ???
    :     .

    : GetUsers().
    :
        Res[OK] Model[large]
        Part[Users] Type[array] Count[3]
          User[Asutp] Service[OODB] IP[..] Inc[..] Out[..] Socket[..]
          User[Timur] Service[RA] IP[..] Inc[..] Out[..] Socket[..]
          User[Nps5] Service[RMU] IP[..] Inc[..] Out[..] Socket[..]
        Endpart[Users].
    :       ,
     Socket  ID ,    
      "CloseUser"   ;  "Inc"  "Out"
           
    .

    : CloseUser(UserID)
    : Res[OK].
    :        .

    : GetINI().
    :
        Res[OK] Model[large]
        Part[INIfile] Type[plain]
          alias=test
          syslogin=asutp
          syspass=asutp
        Endpart[INIfile].  
    :  INI  .

    : SetINI(varName,varValue).
    : Res[OK].
    :     INI  .

    : Sleep().
    : Res[OK].
    :  .       
          .

    : Wake().
    : Res[OK].
    :  .

    : Restart().
    : Res[OK].
    :  .


8.    

mailto: Timur@niist.ntu-kpi.kiev.ua
