Skip to content

Latest commit

 

History

History
3159 lines (2120 loc) · 68.2 KB

SLSKPROTOCOL.md

File metadata and controls

3159 lines (2120 loc) · 68.2 KB

Soulseek Protocol Documentation

Last updated on 21 August 2020

Sections

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

Send Receive
Send to Server 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 its 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 0.1.13, these messages are sent and received in Museek/ServerConnection.cc and defined in Museek/ServerMessages.hh. Since museekd 0.2, they are defined in museekd/servermessages.h.

In Nicotine, these messages are matched to their message number in slskproto.py in the SlskProtoThread function, defined in slskmessages.py and callbacks for the messages are set in pynicotine.py.

The Server Message format

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

Message Index

Code Message
1 Login
2 Set Listen Port
3 Get Peer Address
5 Add User
6 Remove 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
60 Place In Line Response
62 Room Added
63 Room Removed
64 Room List
65 Exact File Search
66 Global/Admin Message
67 Global User List
69 Privileged Users
71 Have No Parents
73 Parent's IP
83 Parent Min Speed
84 Parent Speed Ratio
86 Parent Inactivity Timeout
87 Search Inactivity Timeout
88 Minimum Parents In Cache
90 Distributed Alive Interval
91 Add Privileged User
92 Check Privileges
93 Search Request
100 Accept Children
102 Possible Parents
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
117 Hated Interest Add
118 Hated Interest Remove
120 Room Search
121 Send Upload Speed
122 User Privileges
123 Give Privileges
124 Notify Privileges
125 Acknowledge Notify Privileges
126 Branch Level
127 Branch Root
129 Child Depth
133 Private Room Users
134 Private Room Add User
135 Private Room Remove User
136 Private Room Drop Membership
137 Private Room Drop Ownership
138 Private Room Unknown
139 Private Room Added
140 Private Room Removed
141 Private Room Toggle
142 New Password
143 Private Room Add Operator
144 Private Room Remove Operator
145 Private Room Operator Added
146 Private Room Operator Removed
148 Private Room Owned
149 Message Users
150 Ask Public Chat
151 Stop Public Chat
152 Public Chat Message
153 Related Searches
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 Minor Version
Human 157 32 d51c9a7e9353746a6020f9602d452929 19
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 13 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 183 for Museek+ 157 for Nicotine+
    4. string MD5 hex digest of concatenated username & password
    5. uint32 minor version Minor version (0x13000000 for 157 ns 13e, 0x11000000 for 157 ns 13c)
  • 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

We send this to the server to indicate the port number that we listen 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

We send this to the server to ask for a peer's address (IP address and port), given the peer's username.

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

Used to be kept updated about a user's stats. When a user's stats have changed, the server sends a GetUserStats response message with the new user stats.

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 6

Remove User

Function Names

Museekd: Unimplemented
Nicotine: RemoveUser

Description

Used when we no longer want to be kept updated about a user's stats.

Data Order

  • Send
    1. string username
  • Receive
    • No Message

Server Code 7

Get Status

Function Names

Museekd: SGetStatus
Nicotine: GetUserStatus

Description

The server tells us if a user has gone away or has returned.

Data Order

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

Server Code 13

Say in Chat Room

Function Names

Museekd: SSayChatroom
Nicotine: SayChatroom

Description

Either we want to say something in the chatroom, or someone else did.

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

Server sends us this message when we join a room. Contains users list with data on everyone.

Data Order

  • Send
    1. string room
  • Receive
    1. string room
    2. int number of users in room For private rooms, also contain owner and operators
    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
    11. Iterate thru number of usercountries
      1. string countrycode Uppercase country code
    12. string owner If private room
    13. int number of operators in room If private room
    14. Iterate the number of operators museekd uses a vector of strings
      1. string operator

Server Code 15

Leave Room

Function Names

Museekd: SLeaveRoom
Nicotine: LeaveRoom

Description

We send this to the server when we want to leave a room.

Data Order

  • Send
    1. string room
  • Receive
    1. string room

Server Code 16

A User Joined a Room

Function Names

Museekd: SUserJoinedRoom
Nicotine: UserJoinedRoom

Description

The server tells us someone has just joined a room we're in.

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
    9. string countrycode_ Uppercase country code

Server Code 17

A User Left a Room

Function Names

Museekd: SUserLeftRoom
Nicotine: UserLeftRoom

Description

The server tells us someone has just left a room we're 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

Either we ask server to tell someone else we want to establish a connection with them, or server tells us someone wants to connect with us. Used when the side that wants a connection can't establish it, and tries to go the other way around (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, F or D)
  • Receive
    1. string username
    2. string type Connection Type (P, F or D)
    3. ip ip
    4. int port
    5. uint32 token Use this token for Pierce Firewall
    6. bool privileged

Server Code 22

Private Messages

Function Names

Museekd: SPrivateMessage
Nicotine: MessageUser

Description

Chat phrase sent to someone or received by us in private.

Data Order

  • Send
    1. string username
    2. string message
  • Receive
    1. int ID
    2. int timestamp
    3. string username
    4. string message
    5. bool isAdmin 1 if sent by server, else not present

Server Code 23

Acknowledge Private Message

Function Names

Museekd: SAckPrivateMessage
Nicotine: MessageAcked

Description

We send this to the server to confirm that we received a private message. If we don't send it, the server will keep sending the chat phrase to us.

Museekd also resets timestamps to account for server-time bugginess.

Data Order

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

Server Code 26

File Search

Function Names

Museekd: SFileSearch
Nicotine: FileSearch

Description

We send this to the server when we search for something. Alternatively, the server sends this message to tell us that someone is searching for something.

The ticket/search id is a random number generated by the client and is 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

We send our new status to the server. Status is a way to define whether you're available or busy.

-1 = Unknown
0 = Offline
1 = Away
2 = Online

Data Order

  • Send
    1. int status
  • Receive
    • No Message

Server Code 32

Ping

Function Names

Museekd: SPing
Nicotine: ServerPing

Description

We test if the server responds.

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Server Code 34

Send Speed

Function Names

Museekd: SSendSpeed
Nicotine: SendSpeed

Description

DEPRECIATED

We used to send this after a finished download to let the server update the speed statistics for a user.

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

We send this to server to indicate the number of folder and files that we share.

Data Order

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

Server Code 36

Get User Stats

Function Names

Museekd: SGetUserStats
Nicotine: GetUserStats

Description

The server sends this to indicate a change in a user's statistics, if we've requested to watch the user in AddUser previously. A user's stats can also be requested by sending a GetUserStats message to the server, but AddUser should be used instead.

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: Unimplemented
Nicotine: QueuedDownloads

Description

DEPRECIATED

The server sends this to indicate if someone has download slots available or not.

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

The server sends this if someone else logged in under our nickname, and then disconnects us.

Data Order

  • Send
    • No Message
  • Receive
    • Empty Message

Server Code 42

User Search

Function Names

Museekd: SUserSearch
Nicotine: UserSearch

Description

We send this to the server when we search a specific user's shares. The ticket/search id is a random number generated by the client and is used to track the search results.

Data Order

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

Server Code 51

Add Liked Interest

Function Names

Museekd: SInterestAdd
Nicotine: AddThingILike

Description

We send this to the server when we add an item to our likes list.

Data Order

  • Send
    1. string item
  • Receive
    • No Message

Server Code 52

Remove Liked Interest

Function Names

Museekd: SInterestRemove
Nicotine: RemoveThingILike

Description

We send this to the server when we remove an item from our likes list.

Data Order

  • Send
    1. string item
  • Receive
    • No Message

Server Code 54

Get Recommendations

Function Names

Museekd: SGetRecommendations
Nicotine: Recommendations

Description

The server sends us a list of personal 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
    3. int number of total unrecommendations
    4. Iterate for number of total unrecommendations
      1. string unrecommendation
      2. int number of unrecommendations this unrecommendation has (negative)

Server Code 56

Get Global Recommendations

Function Names

Museekd: SGetGlobalRecommendations
Nicotine: GlobalRecommendations

Description

The server sends us a list of global 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
    3. int number of total unrecommendations
    4. Iterate for number of total unrecommendations
      1. string unrecommendation
      2. int number of unrecommendations this unrecommendation has (negative)

Server Code 57

Get User Interests

Function Names

Museekd: SUserInterests
Nicotine: UserInterests

Description

We ask the server for a user's liked and hated interests. The server responds with a list of 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 60

Place In Line Response

Description

DEPRECIATED

The server tells us a new room has been added.

Function Names

Museekd: Unimplemented
Nicotine: PlaceInLineResponse

Data Order

  • Send
    1. string user
    2. int req
    3. int place
  • Receive
    1. string user
    2. int req
    3. int place

Server Code 62

Room Added

Description

DEPRECIATED

The server tells us a new room has been added.

Function Names

Museekd: Unimplemented
Nicotine: RoomAdded

Data Order

  • Send
    • No Message
  • Receive
    1. string room

Server Code 63

Room Removed

Description

DEPRECIATED

The server tells us a room has been removed.

Function Names

Museekd: Unimplemented
Nicotine: RoomRemoved

Data Order

  • Send
    • No Message
  • Receive
    1. string room

Server Code 64

Room List

Function Names

Museekd: SRoomList
Nicotine: RoomList

Description

The server tells us a 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
    4. Iterate for number of rooms
      1. int number of users in room
  1. int number of owned private rooms
  2. Iterate for number of owned private rooms
    1. string owned private room
  3. int number of owned private rooms
  4. Iterate for number of owned private rooms
    1. int number of users in owned private room
  1. int number of private rooms (except owned)
  2. Iterate for number of private rooms (except owned)
    1. string private room
  3. int number of private rooms (except owned)
  4. Iterate for number of private rooms (except owned)
    1. int number of users in private rooms (except owned)
  1. int number of operated private rooms
  2. Iterate for number of operated private rooms
    1. string operated private room

Server Code 65

Exact File Search

Function Names

Museekd: SExactFileSearch
Nicotine: ExactFileSearch

Description

DEPRECIATED (no results even with official client)

Someone is searching for a file with an exact name.

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

A global message from the server admin has arrived.

Data Order

  • Send
    • No Message
  • Receive
    1. string message

Server Code 67

Global User List

Function Names

Museekd: Unimplemented
Nicotine: GlobalUserList

Description

DEPRECIATED

We send this to get a global list of all users online.

Data Order

  • Send
    • Empty Message
  • Receive
    1. int number of users in room
    2. Iterate the number of users
      1. string user
    3. int number of userdata
    4. Iterate the number of users
      1. int status
    5. int number of userdata
    6. Iterate the userdata
      1. int avgspeed
      2. off_t downloadnum
      3. int files
      4. int dirs
    7. int number of slotsfree
    8. Iterate thru number of slotsfree
      1. int slotsfree
    9. int number of usercountries
    10. Iterate thru number of usercountries
      1. string countrycode Uppercase country code

Server Code 69

Privileged Users

Function Names

Museekd: SPrivilegedUsers
Nicotine: PrivilegedUsers

Description

The server sends us a list of privileged users, a.k.a. users who have donated.

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

We inform the server if we have a distributed parent or not. If not, the server eventually sends us a PossibleParents message with a list of 10 possible parents to connect to.

Data Order

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

Server Code 73

Parent's IP

Function Names

Museekd: SParentIP
Nicotine: SearchParent

Description

We send the IP address of our parent to the server.

Data Order

  • Send
    1. ip ip
  • Receive
    • No Message

Server Code 83

Parent Min Speed

Description

Unknown purpose

Function Names

Museekd: SParentMinSpeed
Nicotine: ParentMinSpeed (unused)

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 84

Parent Speed Ratio

Description

Unknown purpose

Function Names

Museekd: SParentSpeedRatio
Nicotine: ParentSpeedRatio (unused)

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 86

Parent Inactivity Timeout

Description

DEPRECIATED

Function Names

Museekd: SParentInactivityTimeout
Nicotine: ParentInactivityTimeout

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 87

Search Inactivity Timeout

Description

DEPRECIATED

Function Names

Museekd: SSearchInactivityTimeout
Nicotine: SearchInactivityTimeout

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 88

Minimum Parents In Cache

Description

DEPRECIATED

Function Names

Museekd: SMinParentsInCache
Nicotine: MinParentsInCache

Description

Data Order

  • Send
    • No Message
  • Receive
    1. int number

Server Code 90

Distributed Alive Interval

Description

DEPRECIATED

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

The server sends us the username of a new privileged user, which we add to our 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

We ask the server how much time we have left of our privileges. The server responds with the remaining time, in seconds.

Data Order

  • Send
    • Empty Message
  • Receive
    1. int time_left

Server Code 93

Search Request

Description

The server sends us search requests from other users.

Function Names

Museekd: SSearchRequest
Nicotine: SearchRequest

Data Order

  • Send
    • No Message
  • Receive
    1. uint8 distributed code (DSearchRequest)
    2. int unknown
    3. string username
    4. int token
    5. string query

Server Code 100

Accept Children

Description

We tell the server if we want to accept child nodes.

Function Names

Museekd: SAcceptChildren
Nicotine: AcceptChildren (not yet used)

Data Order

  • Send
    1. bool accept
  • Receive
    • No Message

Server Code 102

Possible Parents

Description

The server send us a list of 10 possible distributed parents to connect to. Messages of this type are sent to us at regular intervals, until we tell the server we don't need more possible parents with a HaveNoParent message.

Function Names

Museekd: SNetInfo
Nicotine: PossibleParents

Data Order

  • Send
    • No Message
  • Receive list of search parents
    1. int number of parents
    2. Iterate for number of parents
      1. string user
      2. IP IP address
      3. int port

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

The server sends us a list of similar users related to our interests.

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

The server sends us a list of recommendations related to a specific item, which is usually present in the like/dislike list or an existing recommendation list.

Data Order

  • Send
    1. string item
  • Receive
    1. string item
    2. int number of recommendations
    3. Iterate for number of recommendations
      1. string recommendation
      2. int number of recommendations for this recommendation (can be negative)

Server Code 112

Get Item Similar Users

Function Names

Museekd: SGetItemSimilarUsers
Nicotine: ItemSimilarUsers

Description

The server sends us a list of similar users related to a specific item, which is usually present in the like/dislike list or recommendation list.

Data Order

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

Server Code 113

Room Tickers

Function Names

Museekd: SRoomTickers
Nicotine: RoomTickerState

Description

The server returns a list of tickers in a chat room.

Tickers are customizable, user-specific messages that appear in a banner at the top of a chat room.

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

The server sends us a new ticker that was added to a chat room.

Tickers are customizable, user-specific messages that appear in a banner at the top of a chat room.

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

The server informs us that a ticker was removed from a chat room.

Tickers are customizable, user-specific messages that appear in a banner at the top of a chat room.

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

We send this to the server when we change our own ticker in a chat room.

Tickers are customizable, user-specific messages that appear in a banner at the top of a chat room.

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

We send this to the server when we add an item to our hate list.

Data Order

  • Send
    1. string item
  • Receive
    • No Message

Server Code 118

Remove Hated Interest

Function Names

Museekd: SInterestHatedRemove
Nicotine: RemoveThingIHate

Description

We send this to the server when we remove an item from our hate list.

Data Order

  • Send
    1. string item
  • Receive
    • No Message

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
    • No Message

Server Code 121

Send Upload Speed

Function Names

Museekd: SSendUploadSpeed
Nicotine: SendUploadSpeed

Description

We send this after a finished upload to let the server update the speed statistics for ourselves.

Data Order

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

Server Code 122

User Privileges

Function Names

Museekd: SUserPrivileges
Nicotine: UserPrivileged

Description

We ask the server whether a user is privileged or not.

Data Order

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

Server Code 123

Give Privileges

Function Names

Museekd: SGivePrivileges
Nicotine: GivePrivileges

Description

We give (part of) our privileges, specified in days, to another user on the network.

Data Order

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

Server Code 124

Notify Privileges

Function Names

Nicotine: NotifyPrivileges

Description

The server sends us a notification about our privileges.

Data Order

  • Send
    1. int token
    2. string user
  • 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
    1. int token

Server Code 126

Branch Level

Description

Tell the server what is our position in our branch (xth generation)

Function Names

Museekd: SBranchLevel Nicotine: Unimplemented

Data Order

  • Send
    1. int branch_level
  • Receive
    • No Message

Server Code 127

Branch Root

Description

Tell the server the username of the root of the branch we're in

Function Names

Museekd: SBranchRoot
Nicotine: Unimplemented

Data Order

  • Send
    1. string branch_root
  • Receive
    • No Message

Server Code 129

Child depth

Description

Tell the server the maximum number of generation of children we have.

Function Names

Museekd: SChildDepth
Nicotine: Unimplemented

Data Order

  • Send
    1. int child_depth
  • Receive
    • No Message

Server Code 133

Private Room Users

Description

The server sends us a list of room users that we can alter (add operator abilities / dismember).

Function Names

Museekd: SPrivRoomAlterableMembers
Nicotine: PrivateRoomUsers

Data Order

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

Server Code 134

Private Room Add User

Description

We send this to inform the server that we've added a user to a private room.

Function Names

Museekd: SPrivRoomAddUser
Nicotine: PrivateRoomAddUser

Data Order

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

Server Code 135

Private Room Remove User

Description

We send this to inform the server that we've removed a user from a private room.

Function Names

Museekd: SPrivRoomRemoveUser
Nicotine: PrivateRoomRemoveUser

Data Order

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

Server Code 136

Private Room Drop Membership

Description

We send this to the server to remove our own membership of a private room.

Function Names

Museekd: SPrivRoomDismember
Nicotine: PrivateRoomDismember

Data Order

  • Send
    1. string room
  • Receive
    • No Message

Server Code 137

Private Room Drop Ownership

Description

We send this to the server to stop owning a private room.

Function Names

Museekd: SPrivRoomDisown
Nicotine: PrivateRoomDisown

Data Order

  • Send
    1. string room
  • Receive
    • No Message

Server Code 138

Private Room Unknown

Description

Unknown purporse

Function Names

Museekd: SPrivRoomUnknown138
Nicotine: PrivateRoomSomething

Data Order

  • Send
    1. string room
  • Receive
    1. string room

Server Code 139

Private Room Added

Description

The server sends us this message when we are added to a private room.

Function Names

Museekd: SPrivRoomAdded
Nicotine: PrivateRoomAdded

Data Order

  • Send
    • No Message
  • Receive
    1. string room

Server Code 140

Private Room Removed

Description

The server sends us this message when we are removed from a private room.

Function Names

Museekd: SPrivRoomRemoved
Nicotine: PrivateRoomRemoved

Data Order

  • Send
    • No Message
  • Receive
    1. string room

Server Code 141

Private Room Toggle

Description

We send this when we want to enable or disable invitations to private rooms.

Function Names

Museekd: SPrivRoomToggle
Nicotine: PrivateRoomToggle

Data Order

  • Send
    1. bool enable
  • Receive
    1. bool enable

Server Code 142

New Password

Description

We send this to the server to change our password. We receive a response if our password changes.

Function Names

Museekd: SNewPassword
Nicotine: ChangePassword

Data Order

  • Send
    1. string pass
  • Receive
    1. string pass

Server Code 143

Private Room Add Operator

Description

We send this to the server to add private room operator abilities to a user.

Function Names

Museekd: SPrivRoomAddOperator
Nicotine: PrivateRoomAddOperator

Data Order

  • Send
    1. string room
    2. string operator
  • Receive
    1. string room
    2. string operator

Server Code 144

Private Room Remove Operator

Description

We send this to the server to remove private room operator abilities from a user.

Function Names

Museekd: SPrivRoomRemoveOperator
Nicotine: PrivateRoomRemoveOperator

Data Order

  • Send
    1. string room
  • Receive
    1. string room

Server Code 145

Private Room Operator Added

Description

The server send us this message when we're given operator abilities in a private room.

Function Names

Museekd: SPrivRoomOperatorAdded
Nicotine: PrivateRoomOperatorAdded

Data Order

  • Send
    • No Message
  • Receive
    1. string room

Server Code 146

Private Room Operator Removed

Description

The server send us this message when our operator abilities are removed in a private room.

Function Names

Museekd: SPrivRoomOperatorRemoved
Nicotine: PrivateRoomOperatorRemoved

Data Order

  • Send
    • No Message
  • Receive
    1. string room

Server Code 148

Private Room Operators

Description

The server sends us a list of operators in a specific room, that we can remove operator abilities from.

Function Names

Museekd: SPrivRoomAlterableOperators
Nicotine: PrivateRoomOwned

Data Order

  • Send
    • No Message
  • Receive
    1. string room
    2. int number of operators in room
    3. Iterate the number of operators museekd uses a vector of strings
      1. string operator

Server Code 149

Message Users

Description

Sends a broadcast private message to the given list of users.

Function Names

Museekd: SMessageUsers
Nicotine: Unimplemented

Data Order

  • Send
    1. int number of users
    2. Iterate the number of users museekd uses a vector of strings
      1. string user
    3. string message
  • Receive
    • No Message

Server Code 150

Ask Public Chat

Description

We ask the server to send us messages from all public rooms, also known as public chat.

Function Names

Museekd: SAskPublicChat
Nicotine: JoinPublicRoom

Data Order

  • Send
    • Empty Message
  • Receive
    • No Message

Server Code 151

Stop Public Chat

Description

We ask the server to stop sending us messages from all public rooms, also known as public chat.

Function Names

Museekd: SStopPublicChat
Nicotine: LeavePublicRoom

Data Order

  • Send
    • Empty Message
  • Receive
    • No Message

Server Code 152

Public Chat Message

Description

The server sends this when a new message has been written in a public room (every single line written in every public room).

Function Names

Museekd: SPublicChat
Nicotine: PublicRoomMessage

Data Order

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

Server Code 153

Related Searches

Description

The server returns a list of related search terms for a search query.

Function Names

Museekd: SRelatedSearch
Nicotine: Unimplemented

Data Order

  • Send
    1. string query
  • Receive
    1. string query
    2. int number of terms
    3. Iterate for number of term
      1. string term
      2. int score

Server Code 1001

Cannot Connect

Function Names

Museekd: SCannotConnect
Nicotine: CantConnectToPeer

Description

We send this to say we can't connect to peer after it has asked us to connect. We receive this if we asked peer to connect and it can't do this. This message means a connection can't be established either way.

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

Send Receive
Send to Peer Receive from Peer

In museekd 0.1.13, these messages are sent and received in Museek/PeerConnection.cc and defined in Museek/PeerMessages.hh. Since museekd 0.2, they are defined in museekd/peermessages.h.

In Nicotine, these messages are matched to their message number in slskproto.py in the SlskProtoThread function, defined in slskmessages.py and callbacks for the messages are set in pynicotine.py.

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

Nicotine: PierceFireWall

Description

This is the very first message sent by the peer that established a connection, if it has been asked by the other peer to do so. The token is taken from the ConnectToPeer server message.

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

Nicotine: PeerInit

Description

This message is sent by the peer that initiated a connection, not necessarily a peer that actually established it. Token apparently can be anything. Type is 'P' if it's anything but filetransfer, 'F' otherwise.

See also: Peer Connection Message Order

Data Order

  • Send
    • string user Local Username
    • string type Connection Type (P, F or D)
    • uint32 token Unique Number
  • Receive
    • string user Remote Username
    • string type Connection Type (P, F or D)
    • 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 User Info Request
16 User 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

We send this to a peer to ask for a list of shared files.

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Peer Code 5

Shares Reply

Function Names

Museekd: PSharesReply
Nicotine: SharedFileList

Description

A peer responds with a list of shared files when we've sent a GetSharedFileList.

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

Function Names

Museekd: PSearchRequest
Nicotine: FileSearchRequest

Description

We send this to the peer when we search for a file. Alternatively, the peer sends this to tell us it is searching for a file.

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

The peer sends this when it has a file search match. The token/ticket is taken from original FileSearchRequest message.

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. off_t size
      4. string ext
      5. int attribute size
      6. Iterate number of attributes
        1. int place in attributes
        2. int attribute
    5. bool slotfree
    6. int avgspeed
    7. off_t queue length
  • Receive
    1. decompress
    2. string user
    3. int ticket
    4. int results size number of results
    5. 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
    6. bool slotfree
    7. int avgspeed
    8. off_t queue length

Peer Code 15

User Info Request

Function Names

Museekd: PInfoRequest
Nicotine: UserInfoRequest

Description

We ask the other peer to send us their user information, picture and all.

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Peer Code 16

User Info Reply

Function Names

Museekd: PInfoReply
Nicotine: UserInfoReply

Description

A peer responds with this when we've sent a UserInfoRequest.

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

We ask the peer to send us the contents of a single folder.

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

A peer responds with the contents of a particular folder (with all subfolders) when we've sent a FolderContentsRequest.

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. decompress
    2. int number of folders
    3. 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

We request a file from a peer, or tell a peer that we want to send a file to them.

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

Response to TransferRequest - either we (or the other peer) agrees, or tells the reason for rejecting the file transfer.

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

Response to TransferRequest - either we (or the other peer) agrees, or tells the reason for rejecting the file transfer.

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

Response to TransferRequest - either we (or the other peer) agrees, or tells the reason for rejecting the file transfer.

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

DEPRECIATED

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

Function Names

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: UploadQueueNotification

Description

Data Order

  • Send
    • Empty Message
  • Receive
    • Empty Message

Distributed Messages

Send Send to Node
Receive Receive from Node

In museekd 0.1.13, these messages are sent and received in Museek/DistribConnection.cc and defined in Museek/DistribMessages.hh. Since museekd 0.2, they are defined in museekd/distributedmessages.h.

In Nicotine, these messages are matched to their message number in slskproto.py in the SlskProtoThread function, defined in slskmessages.py and callbacks for the messages are set in pynicotine.py.

The Message format

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

Message Index

Code Message
0 Ping
3 Search Request
4 Branch Level
5 Branch Root
7 Child Depth
93 Server Search Request

Distributed Code 0

Ping

Description

Send it every 60 sec.

Function Names

Museekd: DPing
Nicotine: DistribAlive

Data Order

  • Send
    • Empty Message
  • Receive
    1. uint32 unknown

Distributed Code 3

Search Request

Description

Search request that arrives through the distributed network. We transmit the search request to our children.

Search requests are sent to us by the server using SearchRequest if we're a branch root, or by our parent using DistribSearch.

Function Names

Museekd: DSearchRequest
Nicotine: DistribSearch

Data Order

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

Distributed Code 4

Branch Level

Description

See SBranchLevel

Function Names

Museekd: DBranchLevel
Nicotine: Unimplemented

Data Order

  • Send
    1. uint32 branch_level
  • Receive
    1. uint32 branch_level

Distributed Code 5

Branch Root

Description

See SBranchRoot

Function Names

Museekd: DBranchRoot
Nicotine: Unimplemented

Data Order

  • Send
    1. string branch_root
  • Receive
    1. string branch_root

Distributed Code 7

Branch Level

Description

See SChildDepth

Function Names

Museekd: DChildDepth
Nicotine: Unimplemented

Data Order

  • Send
    1. uint32 child_depth
  • Receive
    1. uint32 child_depth

Distributed Code 93

Server Search Request

Description

Search request that arrives through the distributed network. We transmit the search request to our children.

Search requests are sent to us by the server using SearchRequest if we're a branch root, or by our parent using DistribSearch.

Function Names

Museekd: Unimplemented
Nicotine: DistribServerSearch

Data Order

  • Send
    1. off_t unknown always 210503729152 (?)
    2. string user
    3. int ticket
    4. string query
  • Receive
    1. off_t unknown always 210503729152 (?)
    2. string user
    3. int ticket
    4. string query

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

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

Folder

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

Shares

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

WFolder

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

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