The Soulseek Protocol

Return to Developing Museek Plus or to Developing Nicotine Plus

Packing

String

Length of String String
4 Byte String

Integer (unsigned)

Number
4 Byte

Large Integer (64bits for file sizes)

Number
8 Byte

Bool

Character
1 Byte

Server Messages

Server Messages Peer Messages Distributed Messages Museek Data Types

Send Send to Server
Receive Receive from Server

These messages are used by clients to interface with the server. Internal Server messages are spooky and not understood, since the OSS crowd doesn't have access to it's source code. If you want a Soulseek server, check out Soulfind. Soulfind is obviously not the exact same the official Soulseek server, but it handles the protocol well enough (and can be modified).

In museekd, these messages are sent and received in Museek/ServerConnection.cc and defined in Museek/ServerMessages.hh

The Server Message format

Message Length Code Message Contents
4 Bytes 4 Bytes ...

Message Index

CodeMessage
1 Login
2 Set Listen Port
3 Get Peer Address
5 Add User
7 Get Status
13 Say in Chat Room
14 Join Room
15 Leave Room
16 User Joined Room
17 User Left Room
18 Connect To Peer
22 Private Messages
23 Acknowledge Private Message
26 File Search
28 Set Online Status
32 Ping
34 Send Speed
35 Shared Folders & Files
36 Get User Stats
40 Queued Downloads
41 Kicked from Server
42 User Search
51 Interest Add
52 Interest Remove
54 Get Recommendations
56 Get Global Recommendations
57 Get User Interests
64 Room List
65 Exact File Search
66 Global/Admin Message
69 Privileged Users
71 Have No Parents
86 Parent Inactivity Timeout
87 Search Inactivity Timeout
88 Minimum Parents In Cache
90 Distributed Alive Interval
91 Add Privileged User
92 Check Privileges
102 Net Info
103 Wishlist Search
104 Wishlist Interval
110 Get Similar Users
111 Get Item Recommendations
112 Get Item Similar Users
113 Room Tickers
114 Room Ticker Add
115 Room Ticker Remove
116 Set Room Ticker
120 Room Search
117 Hated Interest Add
118 Hated Interest Remove
121 Send Upload Speed
122 User Privileges
123 Give Privileges
124 Notify Privileges
125 Acknowledge Notify Privileges
1001 Cannot Connect

Server Code 1

Login

Function Names

Museekd: SLogin
Nicotine: Login

Description

Send your username, password, and client version.

Sending Login Example
Description Message Length Message Code Username Length Username Password Length Password
Human 72 1 8 username 8 password
Hex 48 00 00 00 01 00 00 00 08 00 00 00 75 73 65 72 6e 61 6d 65 08 00 00 00 70 61 73 73 77 6f 72 64

Message, continued

Description Version Length Hash Number
Human 181 32 d51c9a7e9353746a6020f9602d452929 1
Hex b5 00 00 00 20 00 00 00 64 35 31 63 39 61 37 65 39 33 35 33 37 34 36 61 36 30 32 30 66 39 36 30 32 64 34 35 32 39 32 39 01 00 00 00

Message as a Hex Stream 48 00 00 00 01 00 00 00 08 00 00 00 75 73 65 72 6e 61 6d 65 08 00 00 00 70 61 73 73 77 6f 72 64 b5 00 00 00 20 00 00 00 64 35 31 63 39 61 37 65 39 33 35 33 37 34 36 61 36 30 32 30 66 39 36 30 32 64 34 35 32 39 32 39 01 00 00 00

Data Order

  • Send Login
    1. string username
    2. string password A non-empty string is required
    3. uint32 version number 182 for Museek+ 181 for Nicotine+
    4. string MD5 hex digest of concatenated username & password
    5. uint32 1 ??? No idea what exactly this is.
    6. string Unknown string In 157 and up
  • Receive Login Success
    1. uchar success 1
    2. string greet A MOTD string
    3. uint32 Your IP Address
    4. string MD5 hex digest of the password string Windows Soulseek uses this hash to determine if it's connected to the official server
  • Receive Login Failure
    1. uchar failure 0
    2. string reason Almost always: Bad Password; sometimes it's a banned message or another error.

Server Code 2

Set Listen Port

Function Names

Museekd: SSetListenPort
Nicotine: SetWaitPort?

Description

The port you listen for connections on (2234 by default)

Data Order

  • Send
    1. uint32 port
  • Receive
    • No Message

Server Code 3

Get Peer Address

Function Names

Museekd: SGetPeerAddress
Nicotine: GetPeerAddress?

Description

A server for a user's IP Address and port

Data Order

  • Send
    1. string username
  • Receive
    1. string username
    2. ip ip
    3. int port

Server Code 5

Add User

Function Names

Museekd: SAddUser
Nicotine: AddUser?

Description

Watch this user's status

Data Order

  • Send
    1. string username
  • Receive
    1. string username
    2. char exists converted to Boolean
    • If exists is 1/True (may not be implemented)
      1. int status 0 == Offline, 1 == Away; 2 == Online
      2. int avgspeed
      3. off_t downloadnum
      4. int files
      5. int dirs
      6. string Country Code (may not be implemented)

Server Code 7

Get Status

Function Names

Museekd: SGetStatus
Nicotine: GetUserStatus?

Description

Data Order

  • Send
    1. string username
  • Receive
    1. string username
    2. int status 0 == Offline, 1 == Away; 2 == Online

Server Code 13

Say in Chat Room

Function Names

Museekd: SSayChatroom
Nicotine: SayChatroom?

Description

Data Order

  • Send
    1. string room
    2. string message
  • Receive
    1. string room
    2. string username
    3. string message

Server Code 14

Join a Room

Function Names

Museekd: SJoinRoom
Nicotine: JoinRoom?

Description

Data Order

  • Send
    1. string room
  • Receive
    1. string room
    2. int number of users in room
    3. Iterate the number of users museekd uses a vector of strings
      1. string user
    4. int number of userdata
    5. Iterate the number of users museekd uses a vector of userdata
      1. int status
    6. int number of userdata
    7. Iterate the userdata vector of userdata (and add unpacked data to User Data)
      1. int avgspeed
      2. off_t downloadnum
      3. int files
      4. int dirs
    8. int number of slotsfree
    9. Iterate thru number of slotsfree
      1. int slotsfree
    10. int number of usercountries (may not be implemented)
    11. Iterate thru number of usercountries
      1. int countrycode Uppercase country code

ServerMessages?.hh then Iterates thru userdata and users (For passing message to daemon)

  • Add data to RoomData users[string username ] = data

Server Code 15

Leave Room

Function Names

Museekd: SLeaveRoom
Nicotine: LeaveRoom?

Description

Data Order

  • Send (leave room)
    1. string room
  • Receive (left room)
    1. string room

Server Code 16

A User Joined a Room

Function Names

Museekd: SUserJoinedRoom
Nicotine: UserJoinedRoom?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. string room
    2. string username
    3. int status
    4. int avgspeed
    5. off_t downloadnum
    6. int files
    7. int dirs
    8. int slotsfree

Server Code 17

A User Left a Room

Function Names

Museekd: SUserLeftRoom
Nicotine: UserLeftRoom?

Description

A user (not you) left a room you are in.

Data Order

  • Send
    • No Message
  • Receive
    1. string room
    2. string username

Server Code 18

Connect To Peer

Function Names

Museekd: SConnectToPeer
Nicotine: ConnectToPeer?

Description

A message you send to the server to notify a client that you want to connect to it, after direct connection has failed. See also: Peer Connection Message Order

Data Order

  • Send
    1. uint32 token
    2. string username
    3. string type Connection Type (P or F)
  • Receive
    1. string username
    2. string type Connection Type (P or F)
    3. ip ip
    4. int port
    5. uint32 token Use this token for Pierce Firewall

Server Code 22

Private Messages

Function Names

Museekd: SPrivateMessage
Nicotine: MessageUser?

Description

Data Order

  • Send
    1. string username
    2. string message
  • Receive
    1. int ID
    2. int timestamp
    3. string username
    4. string message

Server Code 23

Acknowledge Private Message

Function Names

Museekd: SAckPrivateMessage
Nicotine: MessageAcked?

Description

Acknowledge that you received a Private message. If we do not send it, the server will keep sending the chat phrase to us. (Museekd also Reset timestamps to account for server-time bugginess)

Data Order

  • Send
    1. int message ID
  • Receive
    1. int message ID

Server Code 26

File Search Museekd: SFileSearch
Nicotine: FileSearch?

Description

The ticket is a random number generated by the client and used to track the search results.

Data Order

  • Send
    1. int ticket
    2. string search query
  • Receive search request from another user
    1. string username
    2. int ticket
    3. string search query

Server Code 28

Set Online Status

Function Names

Museekd: SSetStatus
Nicotine: SetStatus?

Description

Status is a way to define whether you're available or busy. 0 = Online and 1 = Away

Data Order

  • Send
    1. int status
  • Receive
    • No Message

Server Code 32

Ping

Function Names

Museekd: SPing
Nicotine: ServerPing?

Description

Test if server responds

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Server Code 34

Send Speed

Function Names

Museekd: SSendSpeed
Nicotine: SendSpeed?

Description

DEPRECIATED

Data Order

  • Send average transfer speed
    1. string username
    2. int speed
  • Receive
    • No Message

Server Code 35

Shared Folders & Files

Function Names

Museekd: SSharedFoldersFiles
Nicotine: SharedFoldersFiles?

Description

Data Order

  • Send
    1. int dirs
    2. int files
  • Receive
    • No Message

Server Code 36

Get User Stats Museekd: SGetUserStats
Nicotine: GetUserStats?

Data Order

  • Send
    1. string username
  • Receive
    1. string username
    2. int avgspeed
    3. off_t downloadnum
    4. int files
    5. int dirs

Server Code 40

Queued Downloads

Function Names

Museekd: Not implemented Nicotine: QueuedDownloads?

Description

UNKNOWN IF DEPRECIATED

Data Order

  • Send
    • No Message
  • Receive
    1. string username
    2. bool slotsfree Can immediately download

Server Code 41

Kicked from Server

Function Names

Museekd: SKicked
Nicotine: Relogged

Description

You were disconnected (probably by another user with your name connecting to the Server) so don't try to reconnect automatically.

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Server Code 42

User Search

Function Names

Museekd: SUserSearch
Nicotine: UserSearch?

Description

Search a specific user's shares

Data Order

  • Send
    1. string username
    2. int ticket
    3. string search query
  • Receive
    1. string username
    2. int ticket
    3. string search query

Server Code 51

Add Liked Interest

Function Names

Museekd: SInterestAdd
Nicotine: AddThingILike

Description

Data Order

  • Send
    1. string item
  • Receive
    1. string item

Server Code 52

Remove Liked Interest

Function Names

Museekd: SInterestRemove
Nicotine: RemoveThingILike

Description

Data Order

  • Send
    1. string item
  • Receive
    1. string item

Server Code 54

Get Recommendations

Function Names

Museekd: SGetRecommendations
Nicotine: Recommendations

Description

List of recommendations and a number for each

Data Order

  • Send
    • Empty Message
  • Receive
    1. int number of total recommendations
    2. Iterate for number of total recommendations
      1. string recommendation
      2. int number of recommendations this recommendation has

Server Code 56

Get Global Recommendations

Function Names

Museekd: SGetGlobalRecommendations
Nicotine: GlobalRecommendations?

Description

List of recommendations and a number for each

Data Order

  • Send
    • Empty Message
  • Receive
    1. int number of total recommendations
    2. Iterate for number of total recommendations
      1. string recommendation
      2. int number of recommendations this recommendation has

Server Code 57

Get User Interests

Function Names

Museekd:
Nicotine: UserInterests?

Description

Get a User's Liked and Hated Interests

Data Order

  • Send
    1. string username
  • Receive
    1. string username
    2. int number of liked interests
    3. Iterate for number of liked interests
      1. string interest
    4. int number of hated interests
    5. Iterate for number of hated interests
      1. string interest

Server Code 64

Room List

Function Names

Museekd: SRoomList
Nicotine: RoomList?

Description

List of rooms and the number of users in them. Soulseek has a room size requirement of about 50 users when first connecting. Refreshing the list will download all rooms.

Data Order

  • Send
    • Empty Message
  • Receive
    1. int number of rooms
    2. Iterate for number of rooms
      1. string room
    3. int number of rooms (unused in museekd)
    4. Iterate for number of rooms
      1. int number of users in room

Server Code 65

Exact File Search

Function Names

Museekd: SExactFileSearch
Nicotine: ExactFileSearch?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. string username
    2. uint32 ticket
    3. string filename
    4. string path
    5. off_t filesize
    6. uint32 checkum

Server Code 66

Global / Admin Message

Function Names

Museekd: SGlobalMessage
Nicotine: AdminMessage?

Description

Admins send this message to all users

Data Order

  • Send
    • No Message
  • Receive
    1. string message

Server Code 69

Privileged Users

Function Names

Museekd: SPrivilegedUsers
Nicotine: PrivilegedUsers?

Description

List of privileged users

Data Order

  • Send
    • No Message
  • Receive
    1. int number of users
    2. Iterate number of users
      1. string user

Server Code 71

Have No Parents

Function Names

Museekd: SHaveNoParents
Nicotine: HaveNoParent?

Description

Data Order

  • Send
    1. bool have_parents (is a boolean internal to museekd)
  • Receive
    • No Message

Server Code 83 - 83

Description

Unknown Purpose

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 84 - 84

Description

Unknown Purpose

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 86

Parent Inactivity Timeout

Function Names

Museekd: SParentInactivityTimeout
Nicotine: ParentInactivityTimeout?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 87

Search Inactivity Timeout

Function Names

Museekd: SSearchInactivityTimeout
Nicotine: SearchInactivityTimeout?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 88

Minimum Parents In Cache

Function Names

Museekd: SMinParentsInCache
Nicotine: MinParentsInCache?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 90

Distributed Alive Interval

Function Names

Museekd: SDistribAliveInterval
Nicotine: DistribAliveInterval?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 91

Add Privileged User

Function Names

Museekd: SAddPrivileged
Nicotine: AddToPrivileged?

Description

Add a new privileged user to your list of global privileged users

Data Order

  • Send
    • No Message
  • Receive
    1. string user

Server Code 92

Check Privileges

Function Names

Museekd: SCheckPrivileges
Nicotine: CheckPrivileges?

Description

Data Order

  • Send
    • Empty Message
  • Receive
    1. int time_left

Server Code 102

Net Info

Function Names

Museekd: SNetInfo
Nicotine: NetInfo?

Description

Data Order

  • Send
    • Empty Message
  • Receive list of search parents
    1. int number of parents
    2. Iterate for number of rooms
      1. string user
      2. IP IP address
      3. int number of users in room

Server Code 103

Wishlist Search

Function Names

Museekd: SWishlistSearch
Nicotine: WishlistSearch?

Description

Data Order

  • Send
    1. int ticket
    2. string search query
  • Receive
    • No Message

Server Code 104

Wishlist Interval

Function Names

Museekd: SWishlistInterval
Nicotine: WishlistInterval?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. int interval

Server Code 110

Get Similar Users

Function Names

Museekd: SGetSimilarUsers
Nicotine: SimilarUsers?

Description

Data Order

  • Send
    • Empty Message
  • Receive
    1. int number of users
    2. Iterate for number of user
      1. string user
      2. int status

Server Code 111

Get Item Recommendations

Function Names

Museekd: SGetItemRecommendations
Nicotine: ItemRecommendations?

Description

Data Order

  • Send
    1. string item
  • Receive
    1. int number of recommendations
    2. Iterate for number of recommendations
      1. string recommendation
      2. int number of recommendations for this recommendation

Server Code 112

Get Item Similar Users

Function Names

Museekd: SGetItemSimilarUsers
Nicotine: ItemSimilarUsers?

Description

Data Order

  • Send
    1. string item
  • Receive
    1. int number of users
    2. Iterate for number of user
      1. string user
      2. int 0

Server Code 113

Room Tickers

Function Names

Museekd: SRoomTickers
Nicotine: RoomTickerState?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. string room
    2. int number of users
    3. Iterate for number of user
      1. string user
      2. string tickers

Server Code 114

Room Ticker Add

Function Names

Museekd: SRoomTickerAdd
Nicotine: RoomTickerAdd?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. string room
    2. string user
    3. string ticker

Server Code 115

Room Ticker Remove

Function Names

Museekd: SRoomTickerRemove
Nicotine: RoomTickerRemove?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. string room
    2. string user

Server Code 116

Set Room Ticker

Function Names

Museekd: SSetRoomTicker
Nicotine: RoomTickerSet?

Description

Data Order

  • Send
    1. string room
    2. string ticker
  • Receive
    • No Message

Server Code 117

Add Hated Interest

Function Names

Museekd: SInterestHatedAdd
Nicotine: AddThingIHate

Description

Data Order

  • Send
    1. string item
  • Receive
    1. string item

Server Code 118

Remove Hated Interest

Function Names

Museekd: SInterestHatedRemove
Nicotine: RemoveThingIHate

Description

Data Order

  • Send
    1. string item
  • Receive
    1. string item

Server Code 120

Room Search

Function Names

Museekd: SRoomSearch
Nicotine: RoomSearch?

Description

Data Order

  • Send
    1. string room
    2. string ticket
    3. string search query
  • Receive
    1. string user
    2. string ticket
    3. string search query

Server Code 121

Send Upload Speed

Function Names

Museekd: SSendUploadSpeed
Nicotine: SendUploadSpeed?

Description

Data Order

  • Send average upload transfer speed
    1. int speed
  • Receive
    • No Message

Server Code 122

A user's Soulseek Privileges

Function Names

Museekd: SUserPrivileges
Nicotine: Not implemented

Description

Data Order

  • Send
    1. string user
  • Receive
    1. string user
    2. char privileged (boolean internal to museekd)

Server Code 123

Give Soulseek Privileges to user

Function Names

Museekd: SGivePrivileges
Nicotine: GivePrivileges?

Description

Data Order

  • Send
    1. string user
    2. int days
  • Receive
    • No Message

Server Code 124

Server sends us a Notification about our privileges

Function Names


Nicotine: NotifyPrivileges?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. int token
    2. string user

Server Code 125

Acknowledge Privilege Notification

Function Names


Nicotine: AckNotifyPrivileges?

Description

Data Order

  • Send
    1. int token
  • Receive
    • No Message

Server Code 1001

Cannot Connect

Function Names

Museekd: SCannotConnect
Nicotine: CantConnectToPeer?

Description

See also: Peer Connection Message Order

Data Order

  • Send to the Server if we cannot connect to a peer.
    1. int token
    2. string user
  • Receive this response means we are both firewalled or otherwise unable to connect to each other.
    1. int token
    2. string user

Peer Messages

Server Messages Peer Messages Distributed Messages Museek Data Types

Send Send to Peer
Receive Receive from Peer

In museekd, these messages are sent and received in Museek/PeerConnection.cc and defined in Museek/PeerMessages.hh

The Peer Init Message format

Message Length Code Message Contents
4 Bytes 1 Byte ...

Peer Init Message Index

Code Message
0 Pierce Firewall
1 Peer Init

Peer Connection Message Order

  1. User A sends a Peer Init to User B (Fails: socket cannot connect)
  2. User A sends ConnectToPeer to the Server with a unique token
  3. The Server sends a ConnectToPeer response to User B with the same token
  4. User B sends a Pierce Firewall to User A with the same token (if this fails connections are doomed)
  5. User B sends a Cannot Connect to the Server
  6. The Server sends a Cannot Connect response to User A

Peer Code 0

Pierce Firewall

Function Names

Description

See also: Peer Connection Message Order

Data Order

  • Send
    • uint32 token Unique Number
  • Receive
    • uint32 token Unique Number

Peer Code 1

Peer Init

Function Names

Description

See also: Peer Connection Message Order

Data Order

  • Send
    • string user Local Username
    • string type Connection Type (P or F)
    • uint32 token Unique Number
  • Receive
    • string user Remote Username
    • string type Connection Type (P or F)
    • uint32 token Unique Number

The Message format

Message Length Code Message Contents
4 Bytes 4 Bytes ...

Message Index

Code Message
4 Shares Request
5 Shares Reply
8 Search Request
9 Search Reply
15 Info Request
16 Info Reply
36 Folder Contents Request
37 Folder Contents Reply
40 Transfer Request
41 Upload Reply
41 Download Reply
41 Transfer Reply
42 Upload Placehold
43 Queue Download
44 Upload Queue Notification
46 Upload Failed
50 Queue Failed
51 Place In Queue Request
52 Upload Queue Notification

Peer Code 4

Shares Request

Function Names

Museekd: PSharesRequest
Nicotine: GetShareFileList?

Description

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Peer Code 5

Shares Reply

Function Names

Museekd: PSharesReply
Nicotine: SharedFileList?

Description

Data Order

  • Send shares database
    1. Iterate thru shares database
      1. data
  • Receive shares database
    1. decompress
    2. int number of directories
    3. Iterate number of directories
      1. string directory
      2. int number of files
      3. Iterate number of files
        1. char ??? (unused)
        2. string filename
        3. off_t size File size
        4. string ext Extentsion
        5. int number of attributes
        6. Iterate number of attributes
          1. int place in attributes (unused by museekd)
          2. int attribute

Peer Code 8

Search Request Museekd: PSearchRequest
Nicotine: FileSearchRequest?

Description

Data Order

  • Send
    1. int ticket
    2. string query
  • Receive
    1. int ticket
    2. string query

Peer Code 9

Search Reply

Function Names

Museekd: PSearchReply
Nicotine: FileSearchResult?

Description

Data Order

  • Send
    1. string user
    2. int ticket
    3. int results size number of results
    4. Iterate for number of results
      1. uchar 1
      2. string filename
      3. int size
      4. string ext
      5. int attribute size
      6. Iterate number of attributes
        1. int place in attributes
        2. int attribute
  • Receive
    1. string user
    2. int ticket
    3. int results size number of results
    4. Iterate for number of results museekd pop buffer
      1. string filename
      2. off_t size
      3. string ext
      4. int number of attributes
      5. Iterate number of attributes
        1. int place in attributes
        2. int attribute

Peer Code 15

Info Request

Function Names

Museekd: PInfoRequest
Nicotine: UserInfoRequest?

Description

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Peer Code 16

Info Reply

Function Names

Museekd: PInfoReply
Nicotine: UserInfoReply?

Description

Data Order

  • Send description, picture, totalupl, queuesize, slotfree
    1. string description
    2. Check contents of picture
      • If picture is not empty
        1. bool has_picture 1
        2. string picture
      • If picture is empty
        1. bool has_picture 0
    3. uint totalupl
    4. uint queuesize
    5. bool slotsfree Can immediately upload
  • Receive
    1. string description
    2. char has_picture
    3. Check contents of has_picture
      1. If has_picture is not empty
        1. string picture
    4. int totalupl
    5. int queuesize
    6. bool slotsfree Can immediately download

Peer Code 36

Folder Contents Request

Function Names

Museekd: PFolderContentsRequest
Nicotine: FolderContentsRequest?

Description

Data Order

  • Send
    1. int number of files in directory
    2. Iterate number of files in directory
      1. string file
  • Receive
    1. int number of files in directory
    2. Iterate number of files in directory
      1. string file

Peer Code 37

Folder Contents Reply

Function Names

Museekd: PFolderContentsReply
Nicotine: FolderContentsResponse?

Description

Data Order

  • Send
    1. int number of folders
    2. Iterate for number of folders
      1. string dir
      2. int number of files
      3. Iterate number of files
        1. char true
        2. string file
        3. off_t size
        4. string ext Extension
        5. int number of attributes
          1. int attribute number
          2. int attribute
  • Receive
    1. int number of folders
    2. Iterate for number of folders
      1. string dir
      2. int number of files
      3. Iterate number of files
        1. char ??? (unused)
        2. string file
        3. off_t size
        4. string ext Extension
        5. int number of attributes
          1. int attribute number
          2. int attribute

Peer Code 40

Transfer Request

Function Names

Museekd: PTransferRequest
Nicotine: TransferRequest?

Description

Data Order

  • Send
    1. int direction
    2. int ticket
    3. string filename
    4. Check contents of direction
      • off_t filesize if direction == 1
  • Receive
    1. int direction
    2. int ticket
    3. string filename
    4. Check contents of direction
      • off_t filesize if direction == 1

Peer Code 41 a

Upload Reply

Function Names

Museekd: PUploadReply
Nicotine: TransferResponse?

Description

Data Order

  • Send
    1. string ticket
    2. uchar allowed
    3. Check contents of allowed
      • off_t filesize if allowed == 1
      • string reason if allowed == 0
  • Receive
    • No Message

Peer Code 41 b

Download Reply

Function Names

Museekd: PDownloadReply
Nicotine: TransferResponse?

Description

Data Order

  • Send
    1. string ticket
    2. uchar allowed
    3. Check contents of allowed
      • string reason if allowed == 0
  • Receive
    • No Message

Peer Code 41 c

Transfer Reply

Function Names

Museekd: PTransferReply
Nicotine: TransferResponse?

Description

Data Order

  • Send
    • No Message
  • Receive
    1. string ticket
    2. char allowed == 1
    3. Check contents of allowed
      • off_t filesize if allowed == 1
      • string reason if allowed == 0

Peer Code 42

Upload Placehold

Function Names

Museekd: PUploadPlacehold
Nicotine: PlaceholdUpload?

Description

Data Order

  • Send
    1. string filename
  • Receive
    1. string filename

Peer Code 43

Queue Upload or Download

Function Names

Museekd: PQueueDownload
Nicotine: QueueUpload?

Description

Data Order

  • Send
    1. string filename
  • Receive
    1. string filename

Peer Code 44

Place In Queue Reply Museekd: PPlaceInQueueReply [
Nicotine: PlaceInQueue?

Description

Data Order

  • Send
    1. string filename
    2. string place
  • Receive
    1. string filename
    2. string place

Peer Code 46

Upload Failed

Function Names

Museekd: PUploadFailed
Nicotine: UploadFailed?

Description

Data Order

  • Send
    1. string filename
  • Receive
    1. string filename

Peer Code 50

Queue Failed

Function Names

Museekd: PQueueFailed
Nicotine: QueueFailed?

Description

Data Order

  • Send
    1. string filename
    2. string reason
  • Receive
    1. string filename
    2. string reason

Peer Code 51

Place In Queue Request

Function Names

Museekd: PPlaceInQueueRequest
Nicotine: PlaceInQueueRequest?

Description

Data Order

  • Send
    1. string filename
  • Receive
    1. string filename

Peer Code 52

Upload Queue Notification

Function Names

Museekd: PUploadQueueNotification
Nicotine: Not implemented

Description

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Distributed Messages

Server Messages Peer Messages Distributed Messages Museek Data Types

Send Send to Node
Receive Receive from Node

In museekd, these messages are sent and received in Museek/DistribConnection.cc and defined in Museek/DistribMessages.hh

The Message format

Message Length Code Message Contents
4 Bytes 4 Bytes ...

Message Index

Code Message
0 Ping
3 Search Request
4 Unknown

Distributed Code 0

Ping

Function Names

Museekd: DPing
Nicotine: DistribAlive?

Description

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Distributed Code 3

Search Request

Function Names

Museekd: DSearchRequest
Nicotine: DistribSearch?

Description

Data Order

  • Send
    1. uint32 unknown
    2. string user
    3. uint32 ticket
    4. string query
  • Receive
    1. uint32 unknown
    2. string user
    3. uint32 ticket
    4. string query

Distributed Code 4

Unknown

Function Names


Nicotine: DistribUnknown?

Description

Data Order

  • Send
    • Unknown
  • Receive
    1. uint32 unknown

Museek Data Types

Server Messages Peer Messages Distributed Messages Museek Data Types

StringMap

  • std::map<std::string, std::string>

StringList

  • std::vector<std::string>

WStringList

  • std::vector<std::wstring> WStringList

WTickers

  • std::map<std::string, std::wstring>

Recommendations, SimilarUsers, RoomList

  • std::map<std::string, uint32>

NetInfo

  • std::map<std::string, std::pair<std::string, uint32> >

UserData

  1. uint32 status Online Status
  2. uint32 avgspeed Average Speed
  3. uint32 downloadnum Number of downloaded files
  4. uint32 files Files shared
  5. uint32 dirs Directories shared
  6. bool slotsfree Slots free

RoomData

Folder

Shares

  • std::map<std::string, Folder>

WFolder

Folders

  • std::map<std::string, Shares>

WShares

  • std::map<std::wstring, WFolder>

WFolders

  • std::map<std::wstring, WShares>

off_t

  • Packed as a 64bit Integer