+size_t IPStack_Buffer_GetData(tIPStackBuffer *Buffer, void *Dest, size_t MaxBytes)
+{
+ Uint8 *dest = Dest;
+ size_t rem_space = MaxBytes;
+ size_t len;
+
+ for( int i = Buffer->nSubBuffers; i -- && rem_space != 0; )
+ {
+ len = MIN(Buffer->SubBuffers[i].PreLength, rem_space);
+ memcpy(dest,
+ Buffer->SubBuffers[i].Data,
+ len
+ );
+ dest += len;
+ rem_space -= len;
+ }
+ for( int i = 0; i < Buffer->nSubBuffers && rem_space; i ++ )
+ {
+ if( Buffer->SubBuffers[i].PostLength == 0 )
+ continue ;
+
+ len = MIN(Buffer->SubBuffers[i].PostLength, rem_space);
+ memcpy(dest,
+ (Uint8*)Buffer->SubBuffers[i].Data + Buffer->SubBuffers[i].PreLength,
+ len
+ );
+ dest += len;
+ rem_space -= len;
+ }
+
+ return MaxBytes - rem_space;
+}
+