Advertisement
Guest User

Untitled

a guest
Mar 28th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 4.26 KB | None | 0 0
  1. import
  2.   asyncnet,
  3.   streams
  4.  
  5. type
  6.   UserAccess* = object
  7.     when cpuEndian == bigEndian:
  8.       deleteFile* {.bitsize: 1.}: int
  9.       uploadFile* {.bitsize: 1.}: int
  10.       downloadFile* {.bitsize: 1.}: int
  11.       renameFile* {.bitsize: 1.}: int
  12.       moveFile* {.bitsize: 1.}: int
  13.       createFolder* {.bitsize: 1.}: int
  14.       deleteFolder* {.bitsize: 1.}: int
  15.       renameFolder* {.bitsize: 1.}: int
  16.       moveFolder* {.bitsize: 1.}: int
  17.       readChat* {.bitsize: 1.}: int
  18.       sendChat* {.bitsize: 1.}: int
  19.       openChat* {.bitsize: 1.}: int
  20.       closeChat* {.bitsize: 1.}: int
  21.       showInList* {.bitsize: 1.}: int
  22.       createUser* {.bitsize: 1.}: int
  23.       deleteUser* {.bitsize: 1.}: int
  24.       openUser* {.bitsize: 1.}: int
  25.       modifyUser* {.bitsize: 1.}: int
  26.       changeOwnPass* {.bitsize: 1.}: int
  27.       sendPrivMsg* {.bitsize: 1.}: int
  28.       newsReadArt* {.bitsize: 1.}: int
  29.       newsPostArt* {.bitsize: 1.}: int
  30.       disconUser* {.bitsize: 1.}: int
  31.       cannotBeDiscon* {.bitsize: 1.}: int
  32.       getClientInfo* {.bitsize: 1.}: int
  33.       uploadAnywhere* {.bitsize: 1.}: int
  34.       anyName* {.bitsize: 1.}: int
  35.       noAgreement* {.bitsize: 1.}: int
  36.       setFileComment* {.bitsize: 1.}: int
  37.       setFolderComment* {.bitsize: 1.}: int
  38.       viewDropBoxes* {.bitsize: 1.}: int
  39.       makeAlias* {.bitsize: 1.}: int
  40.       broadcast* {.bitsize: 1.}: int
  41.       newsDeleteArt* {.bitsize: 1.}: int
  42.       newsCreateCat* {.bitsize: 1.}: int
  43.       newsDeleteCat* {.bitsize: 1.}: int
  44.       newsCreateFldr* {.bitsize: 1.}: int
  45.       newsDeleteFldr* {.bitsize: 1.}: int
  46.       uploadFolder* {.bitsize: 1.}: int
  47.       downloadFolder* {.bitsize: 1.}: int
  48.     else:
  49.       renameFolder* {.bitsize: 1.}: int
  50.       deleteFolder* {.bitsize: 1.}: int
  51.       createFolder* {.bitsize: 1.}: int
  52.       moveFile* {.bitsize: 1.}: int
  53.       renameFile* {.bitsize: 1.}: int
  54.       downloadFile* {.bitsize: 1.}: int
  55.       uploadFile* {.bitsize: 1.}: int
  56.       deleteFile* {.bitsize: 1.}: int
  57.       deleteUser* {.bitsize: 1.}: int
  58.       createUser* {.bitsize: 1.}: int
  59.       showInList* {.bitsize: 1.}: int
  60.       closeChat* {.bitsize: 1.}: int
  61.       openChat* {.bitsize: 1.}: int
  62.       sendChat* {.bitsize: 1.}: int
  63.       readChat* {.bitsize: 1.}: int
  64.       moveFolder* {.bitsize: 1.}: int
  65.       cannotBeDiscon* {.bitsize: 1.}: int
  66.       disconUser* {.bitsize: 1.}: int
  67.       newsPostArt* {.bitsize: 1.}: int
  68.       newsReadArt* {.bitsize: 1.}: int
  69.       sendPrivMsg* {.bitsize: 1.}: int
  70.       changeOwnPass* {.bitsize: 1.}: int
  71.       modifyUser* {.bitsize: 1.}: int
  72.       openUser* {.bitsize: 1.}: int
  73.       makeAlias* {.bitsize: 1.}: int
  74.       viewDropBoxes* {.bitsize: 1.}: int
  75.       setFolderComment* {.bitsize: 1.}: int
  76.       setFileComment* {.bitsize: 1.}: int
  77.       noAgreement* {.bitsize: 1.}: int
  78.       anyName* {.bitsize: 1.}: int
  79.       uploadAnywhere* {.bitsize: 1.}: int
  80.       getClientInfo* {.bitsize: 1.}: int
  81.       downloadFolder* {.bitsize: 1.}: int
  82.       uploadFolder* {.bitsize: 1.}: int
  83.       newsDeleteFldr* {.bitsize: 1.}: int
  84.       newsCreateFldr* {.bitsize: 1.}: int
  85.       newsDeleteCat* {.bitsize: 1.}: int
  86.       newsCreateCat* {.bitsize: 1.}: int
  87.       newsDeleteArt* {.bitsize: 1.}: int
  88.       broadcast* {.bitsize: 1.}: int
  89.     reserved {.bitsize: 24.}: int
  90.   UserData* = ref object
  91.     access: UserAccess
  92.     login: string
  93.     password: string
  94.     alias: string
  95.   User* = ref object
  96.     ud: UserData
  97.     socket*: AsyncSocket
  98.     name: string
  99.     id: uint16
  100.     icon: int16
  101.  
  102. proc newUser(id: uint16, socket: AsyncSocket): User =
  103.   result.new()
  104.   result.id = id
  105.   result.socket = socket
  106.  
  107. proc write(s: Stream, ud: UserData) =
  108.   ## Writes a UserData structure in the Hotline 1.9 legacy format
  109.   s.write(int32(4096)) # magic?
  110.   s.write(ud.access)
  111.   for i in countup(0, 63): s.write(int64(0))
  112.   s.write(int16(ud.alias.len()))
  113.   s.write(ud.alias)
  114.   if ud.alias.len() < 134:
  115.     for i in countup(1, 134-ud.alias.len()):
  116.       s.write('\0')
  117.   s.write(int16(ud.login.len()))
  118.   s.write(ud.login)
  119.   if ud.login.len() < 34:
  120.     for i in countup(1, 34-ud.login.len()):
  121.       s.write('\0')
  122.   s.write(int16(ud.password.len()))
  123.   s.write(ud.password)
  124.   if ud.password.len() < 32:
  125.     for i in countup(1, 32-ud.password.len()):
  126.       s.write('\0')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement