コード例 #1
0
/*
 * 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;
}
コード例 #2
0
/*
 * 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;
}