ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

void channel_send ( STREAM  s,
VCHANNEL channel 
)

Definition at line 80 of file channels.c.

{
    uint32 length, flags;
    uint32 thislength, remaining;
    uint8 *data;

    /* first fragment sent in-place */
    s_pop_layer(s, channel_hdr);
    length = s->end - s->p - 8;

    DEBUG_CHANNEL(("channel_send, length = %d\n", length));

    thislength = MIN(length, CHANNEL_CHUNK_LENGTH);
/* Note: In the original clipboard implementation, this number was
   1592, not 1600. However, I don't remember the reason and 1600 seems
   to work so.. This applies only to *this* length, not the length of
   continuation or ending packets. */
    remaining = length - thislength;
    flags = (remaining == 0) ? CHANNEL_FLAG_FIRST | CHANNEL_FLAG_LAST : CHANNEL_FLAG_FIRST;
    if (channel->flags & CHANNEL_OPTION_SHOW_PROTOCOL)
        flags |= CHANNEL_FLAG_SHOW_PROTOCOL;

    out_uint32_le(s, length);
    out_uint32_le(s, flags);
    data = s->end = s->p + thislength;
    DEBUG_CHANNEL(("Sending %d bytes with FLAG_FIRST\n", thislength));
    sec_send_to_channel(s, g_encryption ? SEC_ENCRYPT : 0, channel->mcs_id);

    /* subsequent segments copied (otherwise would have to generate headers backwards) */
    while (remaining > 0)
    {
        thislength = MIN(remaining, CHANNEL_CHUNK_LENGTH);
        remaining -= thislength;
        flags = (remaining == 0) ? CHANNEL_FLAG_LAST : 0;
        if (channel->flags & CHANNEL_OPTION_SHOW_PROTOCOL)
            flags |= CHANNEL_FLAG_SHOW_PROTOCOL;

        DEBUG_CHANNEL(("Sending %d bytes with flags %d\n", thislength, flags));

        s = sec_init(g_encryption ? SEC_ENCRYPT : 0, thislength + 8);
        out_uint32_le(s, length);
        out_uint32_le(s, flags);
        out_uint8p(s, data, thislength);
        s_mark_end(s);
        sec_send_to_channel(s, g_encryption ? SEC_ENCRYPT : 0, channel->mcs_id);

        data += thislength;
    }
}

Generated on Mon May 28 2012 04:42:03 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.