/* * Set some values in our global metadata struct. These values will be sent * to the server as part of the initial connection handshake (isMaster). * If this function is called more than once, or after we've connected to a * mongod, then it will do nothing and return false. It will return true if it * successfully sets the values. * * All arguments are optional. */ bool mongoc_handshake_data_append (const char *driver_name, const char *driver_version, const char *platform) { int max_size = 0; if (gMongocMetadata.frozen) { MONGOC_ERROR ("Cannot set metadata more than once"); return false; } _append_and_truncate (&gMongocMetadata.driver_name, driver_name, METADATA_DRIVER_NAME_MAX); _append_and_truncate (&gMongocMetadata.driver_version, driver_version, METADATA_DRIVER_VERSION_MAX); max_size = METADATA_MAX_SIZE - - _mongoc_strlen_or_zero (gMongocMetadata.os_type) - _mongoc_strlen_or_zero (gMongocMetadata.os_name) - _mongoc_strlen_or_zero (gMongocMetadata.os_version) - _mongoc_strlen_or_zero (gMongocMetadata.os_architecture) - _mongoc_strlen_or_zero (gMongocMetadata.driver_name) - _mongoc_strlen_or_zero (gMongocMetadata.driver_version); _append_and_truncate (&gMongocMetadata.platform, platform, max_size); _mongoc_metadata_freeze (); return true; }
/* * Set some values in our global handshake struct. These values will be sent * to the server as part of the initial connection handshake (isMaster). * If this function is called more than once, or after we've connected to a * mongod, then it will do nothing and return false. It will return true if it * successfully sets the values. * * All arguments are optional. */ bool mongoc_handshake_data_append (const char *driver_name, const char *driver_version, const char *platform) { bson_mutex_lock (&gHandshakeLock); if (_mongoc_handshake_get ()->frozen) { bson_mutex_unlock (&gHandshakeLock); return false; } _append_and_truncate (&_mongoc_handshake_get ()->driver_name, driver_name, HANDSHAKE_DRIVER_NAME_MAX); _append_and_truncate (&_mongoc_handshake_get ()->driver_version, driver_version, HANDSHAKE_DRIVER_VERSION_MAX); /* allow practically any size for "platform", we'll trim it down in * _mongoc_handshake_build_doc_with_application */ _append_and_truncate ( &_mongoc_handshake_get ()->platform, platform, HANDSHAKE_MAX_SIZE); _mongoc_handshake_freeze (); bson_mutex_unlock (&gHandshakeLock); return true; }