Skip to content

Refactor InitialConnectionContext #916

@678098

Description

@678098

There are a few issues with InitialConnectionContext

  1. Not all the fields are explicitly initialized in its constructor
InitialConnectionContext::InitialConnectionContext(bool isIncoming,
                                                   const bsl::string& name)
: d_isIncoming(isIncoming)
, d_name(name)
, d_resultState_p(0)
, d_userData_p(0)
  1. InitialConnectionContext constructor is not explicit
  2. Allocator not provided
  3. Fields are not defined in the alignment-aware order. Fields start with 1-byte bool, then huge padding and bsl::string, ...
  4. There are multiple setters that can be reduced to constructor args to simplify API
    bsl::shared_ptr<InitialConnectionContext> initialConnectionContext;
    initialConnectionContext.createInplace(d_allocator_p,
                                           context->d_isIncoming);
    (*initialConnectionContext)
        .setUserData(context->d_negotiationUserData_sp.get())
        .setResultState(context->d_resultState_p)
        .setChannel(channel)
        .setCompleteCb(bdlf::BindUtil::bind(
            &TCPSessionFactory::negotiationComplete,
            this,
            bdlf::PlaceHolders::_1,  // status
            bdlf::PlaceHolders::_2,  // errorDescription
            bdlf::PlaceHolders::_3,  // session
            bdlf::PlaceHolders::_4,  // channel
            bdlf::PlaceHolders::_5,  // initialConnectionContext
            context));

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions