This commit is contained in:
or-else
2023-02-14 14:55:35 -08:00
parent 6dde89363b
commit 1c0a5fb017
8 changed files with 32 additions and 24 deletions

View File

@ -18,7 +18,9 @@ import (
) )
// Singned AppID. Composition: // Singned AppID. Composition:
// [1:algorithm version][4:appid][2:key sequence][1:isRoot][16:signature] = 24 bytes //
// [1:algorithm version][4:appid][2:key sequence][1:isRoot][16:signature] = 24 bytes
//
// convertible to base64 without padding. All integers are little-endian. // convertible to base64 without padding. All integers are little-endian.
// Definitions for byte lengths of key's parts. // Definitions for byte lengths of key's parts.
const ( const (
@ -37,7 +39,9 @@ const (
) )
// Client signature validation // Client signature validation
// key: client's secret key //
// key: client's secret key
//
// Returns application id, key type. // Returns application id, key type.
func checkAPIKey(apikey string) (isValid, isRoot bool) { func checkAPIKey(apikey string) (isValid, isRoot bool) {
if declen := base64.URLEncoding.DecodedLen(len(apikey)); declen != apikeyLength { if declen := base64.URLEncoding.DecodedLen(len(apikey)); declen != apikeyLength {

View File

@ -116,11 +116,11 @@ func (sess *Session) readOnce(wrt http.ResponseWriter, req *http.Request) (int,
// serveLongPoll handles long poll connections when WebSocket is not available // serveLongPoll handles long poll connections when WebSocket is not available
// Connection could be without sid or with sid: // Connection could be without sid or with sid:
// - if sid is empty, create session, expect a login in the same request, respond and close // - if sid is empty, create session, expect a login in the same request, respond and close
// - if sid is not empty and there is an initialized session, payload is optional // - if sid is not empty and there is an initialized session, payload is optional
// - if no payload, perform long poll // - if no payload, perform long poll
// - if payload exists, process it and close // - if payload exists, process it and close
// - if sid is not empty but there is no session, report an error // - if sid is not empty but there is no session, report an error
func serveLongPoll(wrt http.ResponseWriter, req *http.Request) { func serveLongPoll(wrt http.ResponseWriter, req *http.Request) {
now := time.Now().UTC().Round(time.Millisecond) now := time.Now().UTC().Round(time.Millisecond)

View File

@ -80,13 +80,14 @@ func (t *Topic) loadContacts(uid types.Uid) error {
// This topic got a request from a 'me' topic to start/stop sending presence updates. // This topic got a request from a 'me' topic to start/stop sending presence updates.
// The originating topic reports its own status in 'what' as "on", "off", "gone" or "?unkn". // The originating topic reports its own status in 'what' as "on", "off", "gone" or "?unkn".
// "on" - requester came online //
// "off" - requester is offline now // "on" - requester came online
// "?none" - anchor for "+" command: requester status is unknown, won't generate a response // "off" - requester is offline now
// and isn't forwarded to clients. // "?none" - anchor for "+" command: requester status is unknown, won't generate a response
// "gone" - topic deleted or otherwise gone - equivalent of "off+remove" // and isn't forwarded to clients.
// "?unkn" - requester wants to initiate online status exchange but it's own status is unknown yet. This // "gone" - topic deleted or otherwise gone - equivalent of "off+remove"
// notifications is not forwarded to users. // "?unkn" - requester wants to initiate online status exchange but it's own status is unknown yet. This
// notifications is not forwarded to users.
// //
// "+" commands: // "+" commands:
// "+en": enable subscription, i.e. start accepting incoming notifications from the user2; // "+en": enable subscription, i.e. start accepting incoming notifications from the user2;

View File

@ -1267,9 +1267,10 @@ func (s *Session) note(msg *ClientComMessage) {
// expandTopicName expands session specific topic name to global name // expandTopicName expands session specific topic name to global name
// Returns // Returns
// topic: session-specific topic name the message recipient should see //
// routeTo: routable global topic name // topic: session-specific topic name the message recipient should see
// err: *ServerComMessage with an error to return to the sender // routeTo: routable global topic name
// err: *ServerComMessage with an error to return to the sender
func (s *Session) expandTopicName(msg *ClientComMessage) (string, *ServerComMessage) { func (s *Session) expandTopicName(msg *ClientComMessage) (string, *ServerComMessage) {
if msg.Original == "" { if msg.Original == "" {
logs.Warn.Println("s.etn: empty topic name", s.sid) logs.Warn.Println("s.etn: empty topic name", s.sid)

View File

@ -203,8 +203,8 @@ func (ss *SessionStore) EvictUser(uid types.Uid, skipSid string) {
} }
// NodeRestarted removes stale sessions from a restarted cluster node. // NodeRestarted removes stale sessions from a restarted cluster node.
// - nodeName is the name of affected node // - nodeName is the name of affected node
// - fingerprint is the new fingerprint of the node. // - fingerprint is the new fingerprint of the node.
func (ss *SessionStore) NodeRestarted(nodeName string, fingerprint int64) { func (ss *SessionStore) NodeRestarted(nodeName string, fingerprint int64) {
ss.lock.Lock() ss.lock.Lock()
defer ss.lock.Unlock() defer ss.lock.Unlock()

View File

@ -19,9 +19,10 @@ import (
// A simple implementation of histogram expvar.Var. // A simple implementation of histogram expvar.Var.
// `Bounds` specifies the histogram buckets as follows (length = len(bounds)): // `Bounds` specifies the histogram buckets as follows (length = len(bounds)):
// (-inf, Bounds[i]) for i = 0 //
// [Bounds[i-1], Bounds[i]) for 0 < i < length // (-inf, Bounds[i]) for i = 0
// [Bounds[i-1], +inf) for i = length // [Bounds[i-1], Bounds[i]) for 0 < i < length
// [Bounds[i-1], +inf) for i = length
type histogram struct { type histogram struct {
Count int64 `json:"count"` Count int64 `json:"count"`
Sum float64 `json:"sum"` Sum float64 `json:"sum"`

View File

@ -113,7 +113,7 @@ type storeObj struct{}
// Open initializes the persistence system. Adapter holds a connection pool for a database instance. // Open initializes the persistence system. Adapter holds a connection pool for a database instance.
// //
// name - name of the adapter rquested in the config file // name - name of the adapter rquested in the config file
// jsonconf - configuration string // jsonconf - configuration string
func (storeObj) Open(workerId int, jsonconf json.RawMessage) error { func (storeObj) Open(workerId int, jsonconf json.RawMessage) error {
if err := openAdapter(workerId, jsonconf); err != nil { if err := openAdapter(workerId, jsonconf); err != nil {

View File

@ -104,9 +104,10 @@ func normalizeTags(src []string) types.StringSlice {
} }
// stringDelta extracts the slices of added and removed strings from two slices: // stringDelta extracts the slices of added and removed strings from two slices:
// added := newSlice - (oldSlice & newSlice) -- present in new but missing in old //
// removed := oldSlice - (oldSlice & newSlice) -- present in old but missing in new // added := newSlice - (oldSlice & newSlice) -- present in new but missing in old
// intersection := oldSlice & newSlice -- present in both old and new // removed := oldSlice - (oldSlice & newSlice) -- present in old but missing in new
// intersection := oldSlice & newSlice -- present in both old and new
func stringSliceDelta(rold, rnew []string) (added, removed, intersection []string) { func stringSliceDelta(rold, rnew []string) (added, removed, intersection []string) {
if len(rold) == 0 && len(rnew) == 0 { if len(rold) == 0 && len(rnew) == 0 {
return nil, nil, nil return nil, nil, nil