Museek Plus Protocol
Client & Daemon Messages
Generic message format |
Primitive Data Types |
Complex Data Types | userdata transfer filentry folder sharesdb cipher |
0x0000
Ping
- Client - Ask the daemon to respond
- uint id - Unique identifier
- Daemon
- uint id - Unique identifier (same as what was sent)
0x0001
Challenge
- Client
- Not Sent - (use 0x0002 Login to reply)
- Daemon - Daemon sends this authentication challenge when connected
- uint version - Daemon interface protocol revision
- string challenge - The challenge. Stick interface password at the end of this and generate a hash
0x0002
Login
- Client - Login attempt
- string algorithm - Digest algorithm, one of the following
- SHA1 SHA-1 algorithm
- SHA256 SHA256 algorithm
- MD5 MD5 algorithm
- string chresponse - Challenge response (hex string version of challenge digest)
- uint mask - Interface interest mask, bitwise OR-ed value of any or all of the following
- 0x01 - Receive chat related messages
- 0x02 - Receive private messages
- 0x04 - Receive transfer messages
- 0x08 - Receive user info message
- 0x10 - Receive user shares messages
- 0x20 - Receive interest and recommendation messages
- 0x40 - Receive config messages
- string algorithm - Digest algorithm, one of the following
- Daemon - Login response
- bool ok -Wether login was successful
- string message - In case of failure, what was the error:
- INVHASH - Invalid digest algorithm
- INVPASS - Invalid password
- string challenge -New challenge, in case the interface wishes to try again
0x0003
Server state
- Client
- Not Sent - (Automatically sent on client connection)
- Daemon - Network connection status
- bool connected - Wether the daemon is connected to the soulseek network
- string username - Soulseek Username
0x0004
Check privileges
- Client - Check how many seconds of privileges you have left
- Empty Message
- Daemon
- uint seconds - The number of seconds of privileges you have
0x0005
Set status
- Client - Set away status
- uint status - (0 == online, 1 == away)
- Daemon - Away status set
- uint status - (0 == online, 1 == away)
0x0010
Status Message
- Client
- Not Sent - (Sent by daemon with no interaction required)
- Daemon - Forward messages to the clients
- bool messagetype - ( 0 == Server, 1 == Peer )
- string message - If connected, this contains the message
0x0011
Debug Message
- Client
- Not Sent - (Sent by daemon with no interaction required)
- Daemon - Forward messages to the clients
- string domain - Logging Domain
- string message - If connected, this contains the message
0x0012
New Password
- Client - 'Sent to change password'
- cipher password
- Daemon - Received to confirm password has been changed
- cipher password
0x0100
Configuration state
- Client
- Not Sent - (Automatically sent on client connection)
- Daemon - Contents of the configuration database
- uint ndomains number of domains registered
- Iterate the range of ndomains
- cipher domain domain name
- uint nkeys number of keys registered in this domain
- Iterate the range of nkeys
- cipher key name of this key
- cipher value ciphered value of this key
0x0101
Config set
- Client - Make a change to the configuration database
- cipher domain - Domain to make a change in
- cipher key - Key to change
- cipher value - Value to change it to
- Daemon - Config was changed
- cipher domain - The domain a change took place in
- cipher key - The key that was changed
- cipher value - The new value
0x0102
Config remove
- Client - Remove a key from the configuration database
- cipher domain Domain to remove a key from
- cipher key Key to remove
- Daemon
- cipher domain Domain that a key was removed from
- cipher key Name of the key that was removed
0x0103
Set user image
- Client - Set the image that gets sent with the user info
- string image - The image data
- Daemon
- Not Sent
0x0201
Peer exists
- Client - Check if a certain username is valid
- string username Name of the user to check
- Daemon
- string username - Username that was checked
- bool exists - Wether the username is valid or not
0x0202
Peer status
- Client - Get a user's status
- string username - Name of the user to get the status of
- Daemon
- string username - Name of the user that changed status
- uint status - User's current status, one of the following:
- 0x00 Offline
- 0x01 Away
- 0x02 Online
0x0203
Peer statistics
- Client - Get a users's statistics
- string username Name of the user to get the stats of
- Daemon
- string username - Name of the user daemon is reporting statistics for
- uint avgspeed - User's average speed
- uint numdownloads - Number of files other users have downloaded from this user
- uint numfiles - User's file-count
- uint numdirs - User's directory-count
- bool slotsfull
- string country - User's country code
0x0204
User info
- Client - Get a user's user-info
- string username - User to get the userinfo of
- Daemon
- string username - User we got userinfo of
- string info - User's self-description
- string picture - User's picture
- uint uploads - User's total upload count
- uint queuelen - User's queue length
- bool slotfree - Wether user has a free upload slot
0x0205
User shares
- Client - Get a user's shares
- string username - User to get the shares of
- Daemon
- string username - User the daemon got the shares of
- sharesdb shares - The shares
0x0206
Peer address
- Client - Get a user's IP address and port
- string username - User to get the IP of
- Daemon
- string username - User we got the IP of
- string IP - User's IP address
- uint port - User's client port number
0x0207
Give privileges
- Client - Donate (part) of your privileges to another user
- string username - Username of the person to donate privileges to
- uint days - How many days of privileges to donate
- Daemon
- Not Sent
0x0300
Room state This message is deprecated since museekd 0.3. Use IRoomList, IPrivRoomList, IRoomMembers and IRoomsTickers instead.
- Client - List of rooms and joined rooms and their users
- Not Sent
- Daemon
- uint numrooms - Number of rooms in the room list
- Iterate the range of numrooms
- string roomname - Name of the room
- uint numusers - Number of users in this room
- uint numjoined - Number of rooms we've joined
- Iterate the range of numjoined
- string roomname - Name of the room
- uint numusers - Number of users in this room
- Iterate the range of numusers
- string username - Name of the user
- userdata data User's statistics
- uint numtickers - Number of tickers set for this room
- Iterate the range of numtickers
- string username - Name of the ticker owner
- string message - Contents of the ticker
0x0301
Room list
- Client - Refresh room list
- Empty Message
- Daemon
- uint numrooms - Number of rooms in the room list
- Iterate the range of numrooms_
- string roomname - Name of the room
- uint numusers - Number of users in this room
0x0302
Private message
- Client - Send / receive a private message
- string username - The user to send a message to
- string message - The actual message
- Daemon
- uint direction - Direction (0 = incoming, 1 = outgoing)
- uint timestamp - Timestamp of when the message was received (server's timezone)
- string username - The user that sent the message
- string message - The actual message
0x0303
Join room
- Client - Join a room
- string room - The name of the room to join
- bool private - True if the room should be private. Not present otherwise.
- Daemon - Joined a room
- string room - The name of the room we joined
- uint numusers - Number of users in this room
- Iterate the range of numusers
- string username - Name of the user
- userdata data - User's statistics
- string owner - Name of the private room owner. Only if private.
- uint numops - Number of operators in this room. Only if private.
- Iterate the range of numops Only if private.
- string username - Name of the operator. Only if private.
0x0304
Leave room
- Client - Leave / left a room
- string room - Name of the room to leave
- Daemon
- string room - Name of the room we left
0x0305
User joined room
- Client - A user joined a room
- Not Sent
- Daemon
- string room - Room the user joined
- string username - User that joined
- userdata data - User's statistics
0x0306
User left room
- Client - A user left a room
- Not Sent
- Daemon
- string room - Room the user left
- string username - User that left
0x0307
Say in room
- Client - Say something in a chatroom
- string room - The name of the room to say something in
- string line - What you want to say
- Daemon
- string room - The name of the room someone said something in
- string user - User that said something
- string line - What the user said
0x0308
Room tickers
- Client - List of tickers set for a room
- Not Sent
- Daemon
- string room - Which room the tickers are reported for
- uint numtickers How many tickers are set
- Iterate the range of numtickers
- string user - The user that this ticker belongs to
- string message - The actual ticker message
0x0309
Set room ticker
- Client - Set your room ticker / a room ticker was set
- string room - The room to set the ticker in
- string message - The actual ticker message
- Daemon
- string room - The room a ticker was set in
- string user - The user that set the ticker
- string message - The actual ticker message
0x0310
Message Users
- Client - Send a message to a list of users
- uint numusers How many users will receive this message
- Iterate the range of numusers
- string user - The user that will receive this message
- string message - The message
- Daemon
- Not Sent by daemon
0x0311
Message Buddies
- Client - Send a message to all buddies
- string message - The message
- Daemon
- Not Sent by daemon
0x0312
Message Downloading
- Client - Send a message to all downloading users
- string message - The message
- Daemon
- Not Sent by daemon
0x0313
Ask Public Chat
- Client - Ask the server to send us public chat
- Empty
- Daemon - Confirmation
- Empty
0x0314
Stop Public Chat
- Client - Ask the server to stop sending public chat
- Empty
- Daemon - Confirmation
- Empty
0x0315
Public Chat
- Client - Some public chat
- Not received from clients
- Daemon - Confirmation
- string - room
- string - user
- string - message
0x0320
Private Room Toggle
- Client - Can we be added as member/op
- bool - Enabled
- Daemon - Confirmation
- bool - Enabled
0x0321
Private Room List
- Client
- Not received from clients
- Daemon - List of private rooms
- uint numrooms - Number of rooms
- Iterate the range of numrooms
- string room - The room name
- uint numusers - Number of users
- uint status - Our status in the room (0=>member, 1=>operator, 2=>owner)
0x0322
Private Room Add User
- Client - Ask to add user
- string - Room
- string - User
- Daemon - Confirmation
- string - Room
- string - User
0x0323
Private Room Remove User
- Client - Ask to remove user
- string - Room
- string - User
- Daemon - Confirmation
- string - Room
- string - User
0x0324
Room Members
- Client
- Not received from clients
- Daemon
- uint numrooms - Number of rooms
- Iterate the range of numrooms
- string room - The room name
- uint numusers - Number of users
- Iterate the range of numusers
- UserData userdata - User data
- uint status - User status in the room (0=>member, 1=>operator, 2=>owner)
0x0325
Rooms Tickers
- Client
- Not received from clients
- Daemon
- uint numrooms - Number of rooms
- Iterate the range of numrooms
- string room - The room name
- uint numtickers - Number of tickers
- Iterate the range of numtickers
- string user - User name
- string ticker - User's message
0x0326
Private Room Alterable Members
- Client
- Not received from clients
- Daemon
- string - Room name
- uint nummembers - Number of alterable members
- Iterate the range of nummembers
- string member - The member's name
0x0327
Private Room Alterable Operators
- Client
- Not received from clients
- Daemon
- string - Room name
- uint numops - Number of alterable ops
- Iterate the range of numops
- string operator - The operator's name
0x0328
Private Room Add Operator
- Client - Ask to add operator
- string - Room
- string - User
- Daemon - Confirmation
- string - Room
- string - User
0x0329
Private Room Remove Operator
- Client - Ask to remove operator
- string - Room
- string - User
- Daemon - Confirmation
- string - Room
- string - User
0x0330
Private Room Dismember
- Client - Dismember from a room
- string - Room
- Daemon
- Not Sent
0x0331
Private Room Disown
- Client - Disown a room
- string - Room
- Daemon
- Not Sent
0x0401
Search
- Client - Start a new search
- uint type - Search type (0 = global, 1 = buddies, 2 = room)
- string query - What you want to search for
- Daemon
- string query - The query we're delivering a ticket for
- uint ticket - The search ticket
0x0402
Search reply
- Client - Terminate a search, or results delivered by peers
- uint ticket - The ticket of the search you wish to terminate
- Daemon
- uint ticket - Ticket the search results are for
- string username - User that delivered the results
- bool slotfree - Wether the user has a free upload slot
- uint avgspeed - User's average speed
- uint queuelen - User's queue length
- folder results - The actual results
0x0403
User Search
- Client - Start a new search of only users shares
- string user - Who's shares you wish to search
- string query - What you want to search for
- Daemon
- Not Sent
0x0405
WishList Search
- Client - Start a new wishlist search
- string query - What you want to search for
- Daemon
- Not Sent
0x0406
Add WishList Item
- Client - Add a search term to the wishlist
- string query - What you want to search for
- Daemon
- string query - What you want to search for
- uint lastSearched - Last time this term has been searched (timestamp)
0x0407
Remove WishList Item
- Client - Remove a search term from the wishlist
- string query - What you want to stop searching for
- Daemon
- string query - The removed term
0x0500
Transfer state
- Client - Actual state of all transfers
- Not Sent
- Daemon
- uint numtransfers - Number of transfers
- Iterate the range of numtransfers
- transfer entry - The transfer entry
0x0501
Transfer update
- Client - Status update of a transfer
- string username - User to update a transfer of
- string path - Path of the transfer to update (place in queue)
- Daemon
- transfer entry - The new state of the transfer
0x0502
Transfer remove
- Client - Remove a transfer from the list
- bool upload - Remove upload? (if false, remove download)
- string username - User to clear a transfer from
- string path - Path of the transfer to clear
- Daemon
- bool upload - Was an upload removed? (if false, download was removed)
- string username - User a transfer was removed from
- string path - Path of the transfer that was removed
0x0503
Download file
- Client - Download a file from someone (or retry an existing transfer)
- string username - Username to download a file from
- string path - Path of the file to download
- off_t size - Size of the file to download
- Daemon
- Not Sent
0x0504
Download folder
- Client - Download a folder recursively
- string username - User to download a folder from
- string folder - Path to the folder to download
- Daemon
- Not Sent
0x0505
Abort transfer
- Client - Terminate a transfer
- bool upload - Abort an upload? (if false, abort download)
- string username - User to abort the transfer from
- string path - Path of the transfer to abort
- Daemon
- Not Sent
0x0506
Upload file
- Client - Upload a file from your shares to someone
- string username - Username to upload a file to
- string path - Path of the file in your shares to upload
- Daemon
- Not Sent
0x0507
Download file to..
- Client - Download a file to a directory
- string username - Username to download a file from
- string path - Path of the file to download
- string localpath - Path to store the file name
- off_t size - Size of the file to download
- Daemon
- Not Sent
0x0508
Download folder to..
- Client - Download a folder recursively to a directory
- string username - User to download a folder from
- string folder - Path to the folder to download
- string localpath - Path to store the folder
- Daemon
- Not Sent
0x0509
Upload folder
- Client - Upload a folder from your shares to someone
- string username - Username to upload a folder to
- string path - Path of the folder in your shares to upload
- Daemon
- Not Sent
0x0600
Get Recommendations
- Client - Refresh Recommendations list
- Empty Message
- Daemon
- uint numrecommendations - Number of recommendations
- Iterate the range of numrecommendations
- string recommendation - Name of recommend
- int numrecommendation - Number of users with recommend (can be negative)
0x0601
Get Global Recommendations
- Client - Refresh Global Recommendations list
- Empty Message
- Daemon
- uint numrecommendations - Number of recommendations
- Iterate the range of numrecommendations
- string recommendation - Name of recommend
- int numrecommendation - Number of users with recommend (can be negative)
0x0602
Get Similar Users
- Client - Refresh Similar Users list
- Empty Message
- Daemon
- uint numusers - Number of users
- Iterate the range of numusers
- string users - Name of user
- uint numuser - User's status
0x0603
Get Item Recommendations
- Client - Refresh Recommendations list that matches item
- string item
- Daemon
- string item
- uint numrecommendations - Number of recommendations
- Iterate the range of numrecommendations
- string recommendation - Name of recommend
- int numrecommendation - Number or recommendations for this item (can be negative)
0x0604
Get Item Similar Users
- Client - Refresh Similar Users that match item
- string item
- Daemon
- string item
- uint numusers - Number of users
- Iterate the range of numusers
- string users - Name of user
- uint numuser - User's status
0x0610
Add Liked Interest Liked Interest added
- Client
- string interest - Name of the Interest to add
- Daemon
- string interest - Name of the Interest added
0x0611
Remove Liked Interest Interest Removed
- Client
- string interest - Name of the Interest to remove
- Daemon
- string interest - Name of the Interest remove
0x0612
Add Hated Interest Hated Interest added
- Client
- string interest - Name of the Interest to add
- Daemon
- string interest - Name of the Interest added
0x0613
Remove Hated Interest Hated Interest removed
- Client
- string interest - Name of the Interest to remove
- Daemon
- string interest - Name of the Interest remove
0x0700
Connect to Server
- Client - Manually Connect to server
- Empty Message
- Daemon
- Not Sent
0x0701
Disconnect from Server
- Client - Manually Disconnects from server
- Empty Message
- Daemon
- Not Sent
0x0703
Reload Shares
- Client - Reload the Shares Databases
- Empty Message
- Daemon
- Not Sent
Generic message format
- uint message_len -- Length of the message (including the message code) (unsigned chars)
- uint message_code -- Message code
- Message specific data
Primitive Data types
- bool -- 8bit character (0 == false, not 0 == true)
- uint -- 32bit unsigned little endian ordered integer
- off_t -- 64bit signed little endian ordered integer
- string -- the length of the string (as an uint) + character data
(all strings are UTF8)
Complex Data types
userdata
Statistics about a user
- uint status -- user's status
- uint avgspeed -- user's average upload speed
- uint downloadnum -- number of files other users have downloaded from this user
- uint files -- number of files a user has shared
- uint dirs -- number of dirs a user has shared
- bool slotsfree -- wether or not the user has an upload slot available
transfer
Information about a transfer
- bool is_upload -- Is this an upload or a download?
- string user -- The user associated with this transfer
- string path -- The original path to the transfer
- uint place -- Place in queue or (uint)-1 if unknown (only valid for downloads)
- uint state -- The transfer's state
- 00: Finished
- 01: Transferring
- 02: Negotiating
- 03: Waiting
- 04: Establishing
- 05: Initiating
- 06: Connecting
- 07: Queued remotely
- 08: Getting address
- 09: Getting status
- 10: Awaiting user
- 11: Connection closed
- 12: Cannot connect
- 13: Aborted
- 14: Remote error
- 15: Local error
- 16: Queued locally
- string error -- If the transfer's in error state, this contains the error
- off_t position -- How far has the transfer proceded
- off_t size -- Total size of this transfer
- uint rate -- How fast the transfer is proceding
fileentry
Information about a shared file
- off_t filesize -- the file's size
- string ext -- the file's extended attribute format (only 'mp3' and 'ogg' or an empty string are supported)
- uint numattrs -- number of extended attributes
- Iterate the range of numattrs
- uint attr -- an attribute The extended attribute format holds 3 attributes:
- uint bitrate -- the bitrate of the file
- uint length -- duration of the file in seconds
- uint vbr -- wether the mp3 has a variable bitrate or not
- uint attr -- an attribute The extended attribute format holds 3 attributes:
folder
Information about a shared folder
- uint numfiles -- how many files the folder contains
- Iterate the range of numfiles
- string file -- the filename or full path (depends on context)
- fileentry info -- the file's information
sharesdb
Information about a user's shares
- uint numfolders -- how many folders there are
- Iterate the range of numfolders
- string folder -- the folder's path
- folder files -- the files contained in this folder (filenames are relative)
cipher
AES (aka Rijndael) encrypted string
Configuration strings are sent over the communication layer encrypted as they may contain sensitive information. The keyphrase of the AES cipher equals the password used to log in. This complex data type start with the length of the unencrypted string (n), followed by the encrypted string data. Crucial note: The amount of encrypted characters sent is n rounded up to the nearest 16 byte block size. For exmaple: if the original string was 6 characters long, n will be 6 but is following by 16 characters of data.