Protocols/OSCAR/Foodgroups/OSERVICE/Datatypes/USERINFO: Difference between revisions

From NINA Wiki
Jump to navigation Jump to search
Line 32: Line 32:
| ''[Class: [[Protocols/OSCAR/Foodgroups/OSERVICE/Datatypes/USERINFO#TLV_Class:_OSERVICE_USER_INFO_TAGS|OSERVICE__USER_INFO_TAGS]]]'' TLV Block of user attributes
| ''[Class: [[Protocols/OSCAR/Foodgroups/OSERVICE/Datatypes/USERINFO#TLV_Class:_OSERVICE_USER_INFO_TAGS|OSERVICE__USER_INFO_TAGS]]]'' TLV Block of user attributes
|}
|}
=== From Aleksandr Shutko: Basic OSCAR information (Online userinfo block) ===
<table width=640 bgcolor=darkblue cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 border=0><tr><td bgcolor=#4040FF>
<table width=100% cellSpacing=0 cellPadding=0 border=0><tr><td><b>
<font color="white">&nbsp;Basic OSCAR information (Userinfo block)&nbsp;</font>
</b></td><td width=40% align=right><b><font color="white">&nbsp;</font></b>
</td></tr></table>
</td></tr></table>
</td></tr></table>
<br>
<table width=640 cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=640 bgcolor=darkblue cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 border=0><tr><td bgcolor=#E9E9E9>
<table width=100% cellSpacing=0 cellPadding=0 bgcolor="#4040FF" border=0><tr>
<td><b><font size=2 color="white">&nbsp;
Online userinfo block&nbsp;</font></b></td>
</tr></table>
</td></tr><tr><td bgcolor=#E9E9E9>
<table width=100% cellSpacing=0 cellPadding=0 border=0>
<tr><td width=5>&nbsp;</td><td><br>
&nbsp;&nbsp;&nbsp;&nbsp;
Many usefull SNACs contain special block with online user information. This block
allways contain screenname (uin), warning level and number of TLVs in TLV chain.
TLV chain contain additional user information like DC info, status, user class,
idle time, online time, external ip address, account registration time, etc...
<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;
Here is the list of SNACs that contain userinfo block: SNAC(03,0B), SNAC(04,07),
SNAC(0E,06), SNAC(01,0F), SNAC(01,10), SNAC(02,06), ... Most of them contain just
three TLVs: user class, idle time, online time.
<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;
Note that you may find TLV not listed here in userinfo block. If you have such
new TLV, please send it to author of this documentation. Here is the format of
the online userinfo block (all TLVs are optional):
<br><br>
<table width=620 cellSpacing=0 cellPadding=0 align=center border=0><tr><td width=20></td><td>
<table width=600 bgcolor=darkgreen cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 border=0><tr><td bgcolor=#FAFAFA>
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=20></td>
<td width=125>&nbsp;xx</td>
<td width=5>&nbsp;</td>
<td>byte</td>
<td width=5>&nbsp;</td>
<td width=330>screenname (uin) length</td>
</tr>
<tr>
<td></td>
<td>&nbsp;xx ..</td>
<td>&nbsp;</td>
<td>ascii</td>
<td>&nbsp;</td>
<td>screenname (uin) string</td>
</tr>
<tr>
<td></td>
<td>&nbsp;xx xx</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>warning level</td>
</tr>
<tr>
<td></td>
<td>&nbsp;xx xx</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>number of tlvs in tlv-chain</td>
</tr>
</table>
</td></tr><tr><td bgcolor=#FAFAFA>
<!-- nested tlv(0x01) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;00 01</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x01) - user class <span >(nick flags)</span></td>
</tr>
<tr>
<td>&nbsp;00 04</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;xx xx xx xx</td>
<td width=5>&nbsp;</td>
<td>dword</td>
<td width=5>&nbsp;</td>
<td width=324>[[Protocols/OSCAR/Foodgroups/OSERVICE/Datatypes/USERINFO#Class:_OSERVICE_USER_FLAGS|User class]]</td>
</tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x01) end-->
<!-- nested tlv(0x02) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0 >
<tr>
<td width=125>&nbsp;00 02</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x02) - create time</td>
</tr>
<tr>
<td>&nbsp;00 04</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0 >
<tr>
<td width=125>&nbsp;xx xx xx xx</td>
<td width=5>&nbsp;</td>
<td>dword</td>
<td width=5>&nbsp;</td>
<td width=324>create time (unix time_t format)</td>
</tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x02) end-->
<!-- nested tlv(0x03) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;00 03</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x03) - signon time</td>
</tr>
<tr>
<td>&nbsp;00 04</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;xx xx xx xx</td>
<td width=5>&nbsp;</td>
<td>dword</td>
<td width=5>&nbsp;</td>
<td width=324>signon time (unix time_t format)</td>
</tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x03) end-->
<!-- nested tlv(0x04) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0 >
<tr>
<td width=125>&nbsp;00 04</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x04) - idle time</td>
</tr>
<tr>
<td>&nbsp;00 02</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0 >
<tr>
<td width=125>&nbsp;xx xx</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>idle time (in seconds)</td>
</tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x04) end-->
<!-- nested tlv(0x05) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;00 05</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x05) - account creation time <span><br>(member since)</span></td>
</tr>
<tr>
<td>&nbsp;00 04</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;xx xx xx xx</td>
<td width=5>&nbsp;</td>
<td>dword</td>
<td width=5>&nbsp;</td>
<td width=324>time when this account was registered</td>
</tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x05) end-->
<!-- nested tlv(0x06) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;00 06</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x06) - user status [ICQ only]</td>
</tr>
<tr>
<td>&nbsp;00 04</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;xx xx xx xx</td>
<td width=5>&nbsp;</td>
<td>dword</td>
<td width=5>&nbsp;</td>
<td width=324>[[Protocols/OSCAR/Foodgroups/OSERVICE/Datatypes/USERINFO#Class:_OSERVICE_USER_STATUS|User status]]</td>
</tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x06) end-->
<!-- nested tlv(0x0A) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;00 0A</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x0A) - external ip addr [ICQ only]</td>
</tr>
<tr>
<td>&nbsp;00 04</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;xx xx xx xx</td>
<td width=5>&nbsp;</td>
<td>dword</td>
<td width=5>&nbsp;</td>
<td width=324>External ip address</td>
</tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x0A) end-->
<!-- nested tlv(0x0C) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;00 0C</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x0C) - user DC info [ICQ only]</td>
</tr>
<tr>
<td>&nbsp;00 25</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
  <tr>
  <td width=125>&nbsp;xx xx xx xx</td>
  <td width=5>&nbsp;</td>
  <td>dword</td>
  <td width=5>&nbsp;</td>
  <td width=324>DC internal ip address</td>
  </tr>
  <tr>
  <td>&nbsp;xx xx xx xx</td>
  <td>&nbsp;</td>
  <td>dword</td>
  <td>&nbsp;</td>
  <td>DC tcp port</td>
  </tr>
  <tr>
  <td>&nbsp;xx</td>
  <td>&nbsp;</td>
  <td>byte</td>
  <td>&nbsp;</td>
  <td>[[Protocols/OSCAR/Foodgroups/ICQ#Types|DC type]]</td>
  </tr>
  <tr>
  <td>&nbsp;xx xx</td>
  <td>&nbsp;</td>
  <td>word</td>
  <td>&nbsp;</td>
  <td>DC protocol version</td>
  </tr>
  <tr>
  <td>&nbsp;xx xx xx xx</td>
  <td>&nbsp;</td>
  <td>dword</td>
  <td>&nbsp;</td>
  <td>DC auth cookie</td>
  </tr>
  <tr>
  <td>&nbsp;xx xx xx xx</td>
  <td>&nbsp;</td>
  <td>dword</td>
  <td>&nbsp;</td>
  <td>Web front port</td>
  </tr>
  <tr>
  <td>&nbsp;00 00 00 03</td>
  <td>&nbsp;</td>
  <td>dword</td>
  <td>&nbsp;</td>
  <td>Client futures</td>
  </tr>
  <tr>
  <td>&nbsp;xx xx xx xx</td>
  <td>&nbsp;</td>
  <td>dword</td>
  <td>&nbsp;</td>
  <td>last info update time</td>
  </tr>
  <tr>
  <td>&nbsp;xx xx xx xx</td>
  <td>&nbsp;</td>
  <td>dword</td>
  <td>&nbsp;</td>
  <td>last ext info update time (i.e. icqphone status)</td>
  </tr>
  <tr>
  <td>&nbsp;xx xx xx xx</td>
  <td>&nbsp;</td>
  <td>dword</td>
  <td>&nbsp;</td>
  <td>last ext status update time (i.e. phonebook)</td>
  </tr>
  <tr>
  <td>&nbsp;xx xx</td>
  <td>&nbsp;</td>
  <td>word</td>
  <td>&nbsp;</td>
  <td>unknown</td>
  </tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x0C) end-->
<!-- nested tlv(0x0D) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;00 0D</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x0D) - client capabilities list</td>
</tr>
<tr>
<td>&nbsp;00 04</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;xx ..</td>
<td width=5>&nbsp;</td>
<td>CLSIDs</td>
<td width=5>&nbsp;</td>
<td width=324>Client [[Protocols/OSCAR/UUIDs|capabilities]] list</td>
</tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x0A) end-->
<!-- nested tlv(0x0F) begin -->
<table width=592 cellSpacing=0 cellPadding=0 align=center border=0>
<tr><td height=8 colspan=4></td></tr><tr><td width=20></td><td>
<table width=564 bgcolor=darkred cellSpacing=0 cellPadding=0 border=0><tr><td>
<table width=100% cellSpacing=2 cellPadding=0 align=center border=0><tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;00 0F</td>
<td width=5>&nbsp;</td>
<td>word</td>
<td width=5>&nbsp;</td>
<td width=324>TLV.Type(0x0F) - <span>online time</span></td>
</tr>
<tr>
<td>&nbsp;00 04</td>
<td>&nbsp;</td>
<td>word</td>
<td>&nbsp;</td>
<td>TLV.Length</td>
</tr>
</table>
</td></tr>
<tr><td bgcolor=#E9E9E9>
<table width=564 cellSpacing=0 cellPadding=0 align=center border=0>
<tr>
<td width=125>&nbsp;xx xx xx xx</td>
<td width=5>&nbsp;</td>
<td>dword</td>
<td width=5>&nbsp;</td>
<td width=324>client online time (in seconds)</td>
</tr>
</table>
</td></tr>
</table>
</td></tr></table>
</td><td width=5></td></tr>
<tr><td height=5 colspan=3>
</td></tr></table>
<!-- nested tlv(0x01) end-->
</td></tr></table>
</td></tr></table>
</td></tr></table>
<br>
</td><td width=5>
</td></tr></table>
</td></tr></table>
</td></tr></table>
</td></tr></table>


=== Class: OSERVICE__USER_FLAGS ===
=== Class: OSERVICE__USER_FLAGS ===

Revision as of 11:03, 14 February 2021

OSCAR Protocol
IntroductionTermsClients
Basic
DatatypesFLAPSNACTLV
UUIDsErrorsTool IDs
Host Interaction
Rate LimitsMigrationMessages
Other Services
ADMINADVERTALERT
BARTBOSBUCPCHAT
CHAT_NAV
Tutorials
Sign OnBARTRendezvous
ICBMLocateBuddies
Foodgroups
OSERVICE (0x0001)
LOCATE (0x0002)
BUDDY (0x0003)
ICBM (0x0004)
ADVERT (0x0005)
INVITE (0x0006)
ADMIN (0x0007)
POPUP (0x0008)
PD (0x0009)
USER_LOOKUP (0x000A)
STATS (0x000B)
TRANSLATE (0x000C)
CHAT_NAV (0x000D)
CHAT (0x000E)
ODIR (0x000F)
BART (0x0010)
FEEDBAG (0x0013)
ICQ (0x0015)
BUCP (0x0017)
ALERT (0x0018)
PLUGIN (0x0022)
UNNAMED_FG_24 (0x0024)
MDIR (0x0025)
ARS (0x044A)


Due to the common nature and detailed information for the USERINFO datatype, it was separated here. It largely is in use within the OSERVICE foodgroup.

Usages

Protocols/OSCAR/SNAC/OSERVICE_USER_INFO_QUERY

Protocols/OSCAR/SNAC/OSERVICE_USER_INFO_UPDATE

Protocols/OSCAR/SNAC/OSERVICE_SET_USERINFO_FIELDS


Datatype: OSERVICE__USERINFO

Common data structure that contains a user's username and information about their session.

Name Type Notes
displayId string08 Formated username
evil uint16 (word) Warning level of user
userAttributes tlvBlock [Class: OSERVICE__USER_INFO_TAGS] TLV Block of user attributes


From Aleksandr Shutko: Basic OSCAR information (Online userinfo block)

 Basic OSCAR information (Userinfo block) 

 


  Online userinfo block 
 

     Many usefull SNACs contain special block with online user information. This block allways contain screenname (uin), warning level and number of TLVs in TLV chain. TLV chain contain additional user information like DC info, status, user class, idle time, online time, external ip address, account registration time, etc...

     Here is the list of SNACs that contain userinfo block: SNAC(03,0B), SNAC(04,07), SNAC(0E,06), SNAC(01,0F), SNAC(01,10), SNAC(02,06), ... Most of them contain just three TLVs: user class, idle time, online time.

     Note that you may find TLV not listed here in userinfo block. If you have such new TLV, please send it to author of this documentation. Here is the format of the online userinfo block (all TLVs are optional):

 xx   byte   screenname (uin) length
 xx ..   ascii   screenname (uin) string
 xx xx   word   warning level
 xx xx   word   number of tlvs in tlv-chain
 00 01   word   TLV.Type(0x01) - user class (nick flags)
 00 04   word   TLV.Length
 xx xx xx xx   dword   User class
 00 02   word   TLV.Type(0x02) - create time
 00 04   word   TLV.Length
 xx xx xx xx   dword   create time (unix time_t format)
 00 03   word   TLV.Type(0x03) - signon time
 00 04   word   TLV.Length
 xx xx xx xx   dword   signon time (unix time_t format)
 00 04   word   TLV.Type(0x04) - idle time
 00 02   word   TLV.Length
 xx xx   word   idle time (in seconds)
 00 05   word   TLV.Type(0x05) - account creation time
(member since)
 00 04   word   TLV.Length
 xx xx xx xx   dword   time when this account was registered
 00 06   word   TLV.Type(0x06) - user status [ICQ only]
 00 04   word   TLV.Length
 xx xx xx xx   dword   User status
 00 0A   word   TLV.Type(0x0A) - external ip addr [ICQ only]
 00 04   word   TLV.Length
 xx xx xx xx   dword   External ip address
 00 0C   word   TLV.Type(0x0C) - user DC info [ICQ only]
 00 25   word   TLV.Length
 xx xx xx xx   dword   DC internal ip address
 xx xx xx xx   dword   DC tcp port
 xx   byte   DC type
 xx xx   word   DC protocol version
 xx xx xx xx   dword   DC auth cookie
 xx xx xx xx   dword   Web front port
 00 00 00 03   dword   Client futures
 xx xx xx xx   dword   last info update time
 xx xx xx xx   dword   last ext info update time (i.e. icqphone status)
 xx xx xx xx   dword   last ext status update time (i.e. phonebook)
 xx xx   word   unknown
 00 0D   word   TLV.Type(0x0D) - client capabilities list
 00 04   word   TLV.Length
 xx ..   CLSIDs   Client capabilities list
 00 0F   word   TLV.Type(0x0F) - online time
 00 04   word   TLV.Length
 xx xx xx xx   dword   client online time (in seconds)


Class: OSERVICE__USER_FLAGS

Bits specifying a user's characteristics; For compatibility reasons the lower 2 bytes of USER_FLAGS are sent in the USER_FLAGS tag, while the upper bytes are sent in the USER_FLAGS2 tag.

To form the full user flags the client needs to combine USER_FLAGS and USER_FLAGS2 shifted to the left 2 bytes. USER_FLAGS is always a uint16 (word), which USER_FLAGS2 can be any size. Another way to express the math: userFlags = USER_FLAG | (USER_FLAGS2 << 0x10)

Name Value Notes
OSERVICE__USER_FLAG_DAMNED_TRANSIENT 0x0001 Unconfirmed account
OSERVICE__USER_FLAG_ADMINISTRATOR 0x0002 NINA Administrator
OSERVICE__USER_FLAG_AOL 0x0004 User is on an AOL client
OSERVICE__USER_FLAG_OSCAR_PAY 0x0008 NINA commercial account
OSERVICE__USER_FLAG_OSCAR_FREE 0x0010 NINA free account, typically AIM
OSERVICE__USER_FLAG_UNAVAILABLE 0x0020 User is away
OSERVICE__USER_FLAG_ICQ 0x0040 ICQ user; AIM bit will also be set
OSERVICE__USER_FLAG_WIRELESS 0x0080 On a mobile device
OSERVICE__USER_FLAG_INTERNAL 0x0100 Account for internal use
OSERVICE__USER_FLAG_FISH 0x0200 Using IM Forwarding
OSERVICE__USER_FLAG_BOT 0x0400 Bot user
OSERVICE__USER_FLAG_BEAST 0x0800 NOT CURRENTLY DOCUMENTED
OSERVICE__USER_FLAG_ONE_WAY_WIRELESS 0x1000 One way wireless device
OSERVICE__USER_FLAG_OFFICIAL 0x2000 NOT CURRENTLY DOCUMENTED
OSERVICE__USER_FLAG_BUDDY_MATCH_DIRECT 0x10000 NOT CURRENTLY DOCUMENTED
OSERVICE__USER_FLAG_BUDDY_MATCH_INDIRECT 0x20000 NOT CURRENTLY DOCUMENTED
OSERVICE__USER_FLAG_NO_KNOCK_KNOCK 0x00040000 Do not display the "not on your Buddy List" knock-knock as the server took care of it or the sender is trusted
FORWARD_MOBILE 0x00080000 If no active instances forward to mobile

From Aleksandr Shutko: User classes

 <a name="user_class"></a>User classes 
 

<a name="m0003"></a>     AOL users are divided into several classes. User class field is a 2 byte bitmask. For example ICQ non-commercial account with away status has user-class=0x0070 (OSERVICE__USER_FLAG_OSCAR_FREE (@RUS CLASS_FREE) | OSERVICE__USER_FLAG_UNAVAILABLE (@RUS CLASS_AWAY) | OSERVICE__USER_FLAG_ICQ (@RUS CLASS_ICQ) = 0x0070). Here is the list of known bit values in user class bitmask:

  0x0001   OSERVICE__USER_FLAG_DAMNED_TRANSIENT (@RUS CLASS_UNCONFIRMED)     AOL unconfirmed user flag
  0x0002   OSERVICE__USER_FLAG_ADMINISTRATOR (@RUS CLASS_ADMINISTRATOR)     AOL administrator flag
  0x0004   OSERVICE__USER_FLAG_AOL (@RUS CLASS_AOL)     AOL staff user flag
  0x0008   OSERVICE__USER_FLAG_OSCAR_PAY (@RUS CLASS_COMMERCIAL)     AOL commercial account flag
  0x0010   OSERVICE__USER_FLAG_OSCAR_FREE (@RUS CLASS_FREE)     ICQ non-commercial account flag
  0x0020   OSERVICE__USER_FLAG_UNAVAILABLE (@RUS CLASS_AWAY)     Away status flag
  0x0040   OSERVICE__USER_FLAG_ICQ (@RUS CLASS_ICQ)     ICQ user sign
  0x0080   OSERVICE__USER_FLAG_WIRELESS (@RUS CLASS_WIRELESS)     AOL wireless user
  0x0100   CLASS_UNKNOWN100     Unknown bit
  0x0200   CLASS_UNKNOWN200     Unknown bit
  0x0400   CLASS_UNKNOWN400     Unknown bit
  0x0800   CLASS_UNKNOWN800     Unknown bit


Class: OSERVICE__USER_STATUS

From Aleksandr Shutko: User status

 <a name="user_status"></a>User status 
 

<a name="m0004"></a>     ICQ service presence notifications use user status field which consist of two parts. First is a various flags (birthday flag, webaware flag, etc). Second is a user status (online, away, busy, etc) flags. Each part is a two bytes long. Here is the list of masks for both parts:

  0x0001   OSERVICE__USER_STATUS_FLAG_WEBAWARE (@RUS STATUS_WEBAWARE)     Status webaware flag
  0x0002   OSERVICE__USER_STATUS_FLAG_SHOWIP (@RUS STATUS_SHOWIP)     Status show ip flag
  0x0008   OSERVICE__USER_STATUS_FLAG_BIRTHDAY (@RUS STATUS_BIRTHDAY)     User birthday flag
  0x0020   OSERVICE__USER_STATUS_FLAG_WEBFRONT (@RUS STATUS_WEBFRONT)     User active webfront flag
  0x0100   OSERVICE__USER_STATUS_FLAG_DCDISABLED (@RUS STATUS_DCDISABLED)     Direct connection not supported
  0x1000   OSERVICE__USER_STATUS_FLAG_IP_EXPOSE_NONE (@RUS STATUS_DCAUTH)     Direct connection upon authorization
  0x2000   OSERVICE__USER_STATUS_FLAG_IP_EXPOSE_BL (@RUS STATUS_DCCONT)     DC only with contact users


  0x0000   OSERVICE__USER_STATUS_MASK_NORMAL (@RUS STATUS_ONLINE)     Status is online
  0x0001   OSERVICE__USER_STATUS_MASK_AWAY (@RUS STATUS_AWAY)     Status is away
  0x0002   OSERVICE__USER_STATUS_MASK_DND (@RUS STATUS_DND)     Status is no not disturb (DND)
  0x0004   OSERVICE__USER_STATUS_MASK_NA (@RUS STATUS_NA)     Status is not available (N/A)
  0x0010   OSERVICE__USER_STATUS_MASK_BUSY (@RUS STATUS_OCCUPIED)     Status is occupied (BISY)
  0x0020   OSERVICE__USER_STATUS_MASK_FREE4CHAT (@RUS STATUS_FREE4CHAT)     Status is free for chat
  0x0100   OSERVICE__USER_STATUS_MASK_INVISIBLE (@RUS STATUS_INVISIBLE)     Status is invisible


TLV Class: OSERVICE__USER_INFO_TAGS

These tags contain information about users and their server state.

Name Tag Type Notes
OSERVICE__USER_INFO_USER_FLAGS 0x01 uint16 (word) [Class: OSERVICE__USER_FLAGS] Flags that represent the user's state
OSERVICE__USER_INFO_CREATE_TOD 0x02 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_SIGNON_TOD 0x03 t70 Signon time
OSERVICE__USER_INFO_IDLE_TIME 0x04 uint16 (word) Idle time in minutes
OSERVICE__USER_INFO_MEMBER_SINCE 0x05 t70 Approximation of NINA membership
OSERVICE__USER_INFO_STATUS 0x06 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_CLIENTTYPE 0x08 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_REALIPADDRESS 0x0A uint32 (dword) Network byte order IPv4 address
OSERVICE__USER_INFO_REALIPV6ADDRESS 0x6A string String of IPv6 address
OSERVICE__USER_INFO_ICQINFO 0x0C ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_OSCAR_CAPS 0x0D Array of UUID Client capabilities - if not present use the previous values received; if present but empty, clear previous values
OSERVICE__USER_INFO_AOL_CAPS 0x0E ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_OSCAR_OT 0x0F uint32 (dword) Online time in seconds, if user is using OSCAR
OSERVICE__USER_INFO_AOL_OT 0x10 uint32 (dword) Online time in seconds, if user is using P3
OSERVICE__USER_INFO_ICQ_BROAD_BLOB 0x11 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_ICQ_BROAD_TYPE 0x12 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_INSTANCES 0x13 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_MY_INSTANCE_NUM 0x14 uint8 (byte) Set in first user info. Identifies the instance number of this client
OSERVICE__USER_INFO_MY_PARENTAL_CONTROLS 0x15 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_MY_ZIP 0x16 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_MY_BOT_INFO 0x17 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_ALIAS 0x18 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_SHORT_OSCAR_CAPS 0x19 Array of uint16 (word) Short form of capabilities
OSERVICE__USER_INFO_SHORT_AOL_CAPS 0x1A ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_ENCRYPTION_CERT_MD5 0x1B ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_BART_INFO 0x1D Array of BART__ID Expressions
OSERVICE__USER_INFO_MY_SUBSCRIPTIONS 0x1E ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_USER_FLAGS2 0x1F Array of uint8 (byte) [Class: OSERVICE__USER_FLAGS] Upper bytes of user flags, can be any size. userFlags = USER_FLAG | (USER_FLAGS2 << 16)
OSERVICE__USER_INFO_UNKNOWN_22 0x22 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_BUDDY_FEED_TIME 0x23 t70 Last Buddy Feed update time
OSERVICE__USER_INFO_SIG_TIME 0x26 t70 Time that the profile was set
OSERVICE__USER_INFO_AWAY_TIME 0x27 t70 Time that away was set
OSERVICE__USER_INFO_PRIMARY_INSTANCE 0x28 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_UNKNOWN_29_TIME 0x29 ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_GEO_COUNTRY 0x2A string Two character country code. Sent from host to client if country is known
OSERVICE__USER_INFO_BUDDY_UPDATE_INDC_URL 0x2B ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_UNKNOWN_2C 0x2C ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_UNKNOWN_2D 0x2D ? NOT CURRENTLY DOCUMENTED
OSERVICE__USER_INFO_UNKNOWN_2F 0x2F ? NOT CURRENTLY DOCUMENTED