throbber
/Users/implicit/Desktop/Source Code/2001.11.01/beads/f…/main/framer.c
`Page 1/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`1
`+++++¬
`…
`¬2
`Copyright (c) 2001 BeComm Corporation¬
`3
`¬4
`Filename:¬
`5
`¬6
` framer.c¬
`7
`¬8
`Group Name:¬
`9
`¬10
` todo¬
`11
`¬12
`Group Overview:¬
`13
`¬14
` todo¬
`15
`¬16
`Owner:¬
`17
`¬18
` Guy Carpenter (guyc) 16-Aug-2001¬
`19
`¬20
`--------------------------------------------------------------------------
`21
`---*/¬
`…
`#define DEBUG_ZONE "/beads/framer"¬
`22
`¬23
`#include <sosstrings.h>¬
`24
`¬25
`#include <stdio.h>¬
`26
`¬27
`SOS_SOURCE_VERSION (¬
`28
` "$Id: framer.c,v 1.3 2001/10/11 17:32:53 guyc Exp $"¬
`29
`);¬
`30
`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`31
`+++++¬
`…
`Named Constants¬
`32
`--------------------------------------------------------------------------
`33
`---*/¬
`…
`¬34
`/*¬
`35
`* Name of bead¬
`36
`*/¬
`37
`static const char BEAD_NAME[] = "framer";¬
`38
`¬39
`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`40
`+++++¬
`…
`
`Page 1 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/beads/f…/main/framer.c
`Page 2/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`Definitions¬
`41
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`42
`+++*/¬
`…
`¬43
`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`44
`+++++¬
`…
`globals¬
`45
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`46
`+++*/¬
`…
`¬47
`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`48
`+++++¬
`…
`Macros¬
`49
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`50
`+++*/¬
`…
`¬51
`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`52
`+++++¬
`…
`Types¬
`53
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`54
`+++*/¬
`…
`¬55
`typedef struct _FRAMER {¬
`56
` size_t Length;¬
`57
` SOS_MESSAGE * Remainder;¬
`58
`} FRAMER;¬
`59
`¬60
`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`61
`+++++¬
`…
`Helper Functions¬
`62
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`63
`+++*/¬
`…
`¬64
`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`65
`+++++¬
`…
`Context create and destory¬
`66
`--------------------------------------------------------------------------
`67
`---*/¬
`…
`¬68
`/*++¬
`69
`Routine Name:¬
`70
`¬71
` Framer_ContextCreate¬
`72
`¬73
`Routine Description:¬
`74
`
`Page 2 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/beads/f…/main/framer.c
`Page 3/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`¬75
` Attempt to allocate a Framer session and all the resources it
`76
`requires.¬
`…
`¬77
`Parameters:¬
`78
`¬79
` None.¬
`80
`¬81
`Return Value:¬
`82
`¬83
` FRAMER * - ¬
`84
` A valid pointer to a session context on success.¬
`85
`¬86
` A NULL pointer if an error occured.¬
`87
`¬88
`--*/¬
`89
`static¬
`90
`FRAMER *¬
`91
`Framer_ContextCreate(¬
`92
` void¬
`93
`)¬
`94
`{¬
`95
` FRAMER *context;¬
`96
`¬97
` SOS_DEBUGOUT_FUNC_TRACE("Framer_ContextCreate called\n");¬
`98
`¬99
` /* allocate memory for Framer session context */¬
`100
` context = SOS_Mem_Alloc(sizeof(*context));¬
`101

`102
` if (context) {¬
`103
` SOS_memset(context, 0, sizeof(*context));¬
`104
` context->Remainder = SOS_Message_Create();¬
`105
` }¬
`106
` ¬
`107
` return context;¬
`108
`}¬
`109

`110
`/*++¬
`111
`Routine Name:¬
`112

`113
` Framer_ContextDestroy¬
`114

`115
`Routine Description:¬
`116

`117
` A helper function use to release all Framer context resources.¬
`118
`
`Page 3 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/beads/f…/main/framer.c
`Page 4/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`119
`120
`121
`122
`123
`124
`125
`126
`127
`128
`129
`130
`131
`132
`133
`134
`135
`136
`137
`138
`139
`140
`141
`142
`143
`144
`…
`145
`146
`…
`147
`148
`149
`150
`151
`152
`153
`154
`155
`156
`157
`158
`159
`160
`161
`

`Parameters:¬

` FRAMER * Context - [consumed]¬
` An Framer context who's resources and memory are to be freed¬

`Return Value:¬

` None.¬

`--*/¬
`static¬
`void¬
`Framer_ContextDestroy(¬
` FRAMER * Context¬
`)¬
`{¬
` SOS_DEBUGOUT_FUNC_TRACE("Framer_ContextDestroy called\n");¬
` ¬
` if (Context) {¬
` SOS_Message_Destroy(Context->Remainder);¬
` SOS_Mem_Free(Context);¬
` }¬
`}¬

`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`+++++¬
`Edge Handlers¬
`--------------------------------------------------------------------------
`---*/¬

`/*++¬
`Routine Name:¬

` Framer_KeyCreate¬

`Routine Description:¬

` Creates a unique Key and assocates it with the given path every¬
` time it is called. ¬
` A value of SOS_PathBuild_Stop is returned because¬
` whoever comes after Framer wants the AudioFormat variable to¬
` be set and it currently is not set until Framer_MessageHandler.¬

`Parameters:¬
`
`Page 4 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/beads/f…/main/framer.c
`Page 5/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`162
`163
`164
`165
`166
`167
`168
`169
`170
`171
`172
`173
`174
`175
`176
`177
`178
`179
`180
`181
`182
`183
`184
`185
`186
`187
`188
`189
`190
`191
`192
`193
`194
`195
`196
`197
`198
`199
`200
`201
`202
`203
`204
`205
`206
`

` SOS_PATH *Path - [in]¬
` The new Path to create a Key for¬

` SOS_MESSAGE *Message - [in]¬
` The first message sent along this path. ¬

`Return Value:¬

` SOS_STATUS - ¬
` SOS_PathBuild_Stop on success.¬

` SOS_Error if something goes wrong.¬
`--*/¬
`static¬
`SOS_STATUS¬
`Framer_KeyCreate(¬
` SOS_PATH *Path,¬
` SOS_MESSAGE *Message¬
`)¬
`{¬
` static int s_UniqueId;¬

` SOS_REGOBJECT* uniqueSessionKey = SOS_Int32_Create(s_UniqueId++);¬
` SOS_STATUS status = SOS_Success;¬

` SOS_DEBUGOUT_FUNC_TRACE("Framer_KeyCreate called\n");¬

` if (!uniqueSessionKey) {¬
` status = SOS_Error;¬
` }¬

` /* set a unique key on the Path */¬
` if (SOS_SUCCEEDED(status)){¬
` status = SOS_Path_SessionKeySet(Path, uniqueSessionKey);¬
` SOS_RegObject_Release(uniqueSessionKey);¬
` }¬

` return status;¬
`}¬


`/*++¬
`Routine Name:¬

`
`Page 5 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/beads/f…/main/framer.c
`Page 6/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`207
`208
`209
`210
`211
`212
`213
`214
`215
`216
`217
`218
`219
`220
`221
`222
`223
`224
`225
`226
`227
`228
`229
`230
`231
`232
`233
`234
`235
`236
`237
`238
`239
`240
`241
`242
`243
`244
`245
`246
`247
`248
`249
`250
`251
`
` Framer_EncodeHandler¬

`Routine Description:¬

` Insert Description Here¬

`Parameters:¬

` SOS_PATH *Path - [in]¬
` The Path that this message is arriving on. It is used to get¬
` the Framer session context.¬

` SOS_MESSAGE *Message - [consumed]¬
` Message containing framed data.¬

`Return Value:¬

` SOS_STATUS - ¬
` SOS_Success if decode and message send onward were successful.¬

` SOS_Error otherwise.¬

`--*/¬
`static¬
`SOS_STATUS¬
`Framer_EncodeHandler(¬
` SOS_PATH *Path,¬
` SOS_MESSAGE *Message¬
`)¬
`{¬
` SOS_STATUS status = SOS_Success;¬
` FRAMER * context;¬

` SOS_DEBUGOUT_FUNC_TRACE("Framer_EncodeHandler\n");¬

` status = SOS_Path_SessionContextPeek(Path, (void**)&context);¬

` if (SOS_SUCCEEDED(status)) {¬
` size_t length = SOS_Message_LengthGet(Message);¬
` SOS_UINT32* size = SOS_Mem_Alloc(sizeof(*size));¬
` if (size) {¬
` // REVISIT - byte order¬
` *size = length;¬
` SOS_Message_HeadDataPush(¬
` Message,¬
`
`Page 6 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/beads/f…/main/framer.c
`Page 7/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`252
`253
`254
`255
`256
`257
`258
`259
`260
`261
`262
`263
`264
`265
`266
`267
`268
`269
`270
`271
`272
`273
`274
`275
`276
`277
`278
`279
`280
`281
`282
`283
`284
`285
`286
`287
`288
`289
`290
`291
`292
`293
`294
`295
`296
`
` size,¬
` sizeof(*size),¬
` SOS_Mem_Free¬
` );¬
` ¬
` status = SOS_Path_MessageSend(Path, Message);¬
` } else {¬
` /* couldn't malloc the header */¬
` status = SOS_ErrorResourceAllocation;¬
` }¬
` } else {¬
` /* couldn't get the context */¬
` status = SOS_Error;¬
` }¬

` return status;¬
` ¬
`}¬
` ¬
`static¬
`SOS_STATUS¬
`Framer_DecodeHandler(¬
` SOS_PATH *Path,¬
` SOS_MESSAGE *Message¬
`)¬
`{¬
` FRAMER * context;¬
` SOS_STATUS status = SOS_Success;¬
` SOS_BOOLEAN done = SOS_False;¬

` SOS_DEBUGOUT_DETAIL("Framer_DecodeHandler\n");¬

` status = SOS_Path_SessionContextPeek(Path, (void**)&context);¬

` if (SOS_SUCCEEDED(status)) {¬
` /*¬
` * Append the entire message to our remainder¬
` * so we can work from there.¬
` */¬
` SOS_Message_DataMoveHeadToTail(¬
` context->Remainder,¬
` Message,¬
` SOS_Message_LengthGet(Message)¬
` );¬
` SOS_Message_Destroy(Message);¬
`
`Page 7 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/beads/f…/main/framer.c
`Page 8/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`297
`298
`299
`300
`301
`302
`303
`304
`305
`306
`307
`308
`309
`310
`311
`312
`313
`314
`315
`316
`317
`318
`319
`320
`321
`322
`323
`324
`325
`326
`327
`328
`329
`330
`331
`332
`333
`334
`335
`336
`337
`338
`339
`340
`341
`

` while (!done) {¬
` size_t length = SOS_Message_LengthGet(context->Remainder);¬
` if (context->Length==0) {¬
` /*¬
` * Starting on a new frame¬
` */¬
` if (length>4) {¬
` SOS_UINT32 size;¬
` SOS_Message_HeadDataPop(¬
` context->Remainder,¬
` sizeof(SOS_UINT32),¬
` &size,¬
` NULL¬
` );¬
` // REVISIT - assumes little-endian¬
` context->Length=size;¬
` SOS_DEBUGOUT_DATA_TRACE(¬
` "Frame size %lu\n",¬
` size);¬
` } else {¬
` done = SOS_True;¬
` }¬
` } else {¬
` if (length>=context->Length) {¬
` /*¬
` * Have a complete frame¬
` */¬
` SOS_MESSAGE *outMessage;¬

` SOS_DEBUGOUT_DATA_TRACE(¬
` "Sending frame of %lu\n",¬
` context->Length);¬

` SOS_Message_HeadMessagePop(¬
` context->Remainder,¬
` context->Length,¬
` &outMessage);¬

` SOS_Path_MessageSend(Path, outMessage);¬

` context->Length = 0;¬

` } else {¬
` done = SOS_True;¬
`
`Page 8 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/beads/f…/main/framer.c
`Page 9/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`342
`343
`344
`345
`346
`347
`348
`349
`350
`351
`…
`352
`353
`…
`354
`355
`356
`357
`358
`359
`360
`361
`362
`363
`364
`365
`366
`367
`368
`369
`370
`371
`372
`373
`374
`375
`376
`377
`378
`379
`380
`381
`382
`383
`384
`
` }¬
` }¬
` }¬
` ¬
` }¬

` return status;¬
`}¬

`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`+++++¬
`Session init and uninit¬
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`+++*/¬

`/*++¬
`Routine Name:¬

` Framer_SessionInit¬

`Routine Description:¬

` Called by Strings when Framer_KeyCreate returns that a new¬
` Framer session should be created. It allocates a session¬
` context and assocates it with the Path that is passed in.¬

`Parameters:¬

` SOS_PATH *Path - [in]¬
` The path assocated with the framer to be created.¬

`Return Value:¬

` SOS_STATUS - ¬
` SOS_Success if a context was created and succesfully assocated¬
` with a path.¬

` SOS_Error otherwise.¬

`--*/¬
`static¬
`SOS_STATUS¬
`Framer_SessionInit(¬
` SOS_PATH *Path¬
`)¬
`
`Page 9 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/bea…/…/main/framer.c
`Page 10/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`385
`386
`387
`388
`389
`390
`391
`392
`393
`394
`395
`396
`397
`398
`399
`400
`401
`402
`403
`404
`405
`406
`407
`408
`409
`410
`411
`412
`413
`414
`415
`416
`417
`418
`419
`420
`421
`422
`423
`424
`425
`426
`427
`428
`429
`
`{¬
` SOS_STATUS status = SOS_Success;¬
` FRAMER *context = Framer_ContextCreate();¬

` SOS_DEBUGOUT_DETAIL("Framer_SessionInit called\n");¬

` if (context) {¬
` status = SOS_Path_SessionContextPut(Path, context);¬
` } else {¬
` /* could not create context */¬
` status = SOS_Error;¬
` }¬
` ¬
` return status;¬
`}¬

`/*++¬
`Routine Name:¬

` Framer_SessionUninit¬

`Routine Description:¬

` Called by Strings to free all memory assocated with this session¬
` of framer¬

`Parameters:¬

` SOS_PATH *Path - [in]¬
` The path assocated with the framer to be destroyed.¬

`Return Value:¬

` SOS_STATUS - ¬
` SOS_Success always.¬

`--*/¬
`static¬
`SOS_STATUS¬
`Framer_SessionUninit(¬
` SOS_PATH *Path¬
`)¬
`{¬
` SOS_STATUS status;¬
` FRAMER *context;¬
`
`Page 10 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/bea…/…/main/framer.c
`Page 11/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`430
`431
`432
`433
`434
`435
`436
`437
`438
`439
`440
`441
`442
`443
`444
`…
`445
`446
`…
`447
`448
`449
`450
`451
`452
`453
`454
`455
`456
`457
`458
`459
`460
`461
`462
`463
`464
`465
`466
`467
`468
`469
`470
`471
`472
`

` SOS_DEBUGOUT_DETAIL("Framer_SessionUninit called\n");¬

` /* find the session context assocated with this path */¬
` status = SOS_Path_SessionContextPeek(Path, (void**)&context);¬

` /* make sure we found a valid context */¬
` if (SOS_SUCCEEDED(status) && context) {¬
` Framer_ContextDestroy(context);¬
` }¬

` return SOS_Success;¬
`}¬

`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`+++++¬
`Bead init and uninit¬
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`+++*/¬

`/*++¬
`Routine Name:¬

` Framer_BeadInit¬

`Routine Description:¬

` This function is called by Strings when the framer bead is¬
` registerd. We use it to register one edge associated with the¬
` framer bead.¬
` ¬
`Parameters:¬

` SOS_BEAD *Bead - [in]¬
` A reference to the framer bead. We use this parameter to¬
` register edges assocated with the framer bead.¬

` SOS_REGOBJECT *InitContext - [in]¬
` Set to NULL because thats the value we passed into the bead¬
` register function.¬

`Return Value:¬

` SOS_STATUS - ¬
` The return value of our call to SOS_Edge_Register.¬
`
`Page 11 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/bea…/…/main/framer.c
`Page 12/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`473
`474
`475
`476
`477
`478
`479
`480
`481
`482
`483
`484
`485
`486
`487
`488
`489
`490
`491
`492
`493
`494
`495
`496
`497
`498
`499
`500
`501
`502
`503
`504
`505
`506
`507
`508
`509
`510
`511
`512
`513
`514
`515
`516
`517
`

`--*/¬
`static¬
`SOS_STATUS¬
`Framer_BeadInit(¬
` SOS_BEAD *Bead,¬
` SOS_REGOBJECT *InitContext¬
`)¬
`{¬
` SOS_STATUS status;¬
` ¬
` SOS_DEBUGOUT_DETAIL("BeadInit called\n");¬
` /* register Encode Edge */¬
` status = SOS_Edge_Register(¬
` Bead,¬
` "Decode",¬
` NULL,¬
` NULL,¬
` NULL,¬
` Framer_KeyCreate,¬
` Framer_DecodeHandler,¬
` NULL,¬
` NULL,¬
` NULL,¬
` NULL);¬

` status = SOS_Edge_Register(¬
` Bead,¬
` "Encode",¬
` NULL,¬
` NULL,¬
` NULL,¬
` Framer_KeyCreate,¬
` Framer_EncodeHandler,¬
` NULL,¬
` NULL,¬
` NULL,¬
` NULL);¬

` if (SOS_FAILED(status)) {¬
` SOS_DEBUGOUT_MAJOR_EVENT( "Could not register Decode edge");¬
` }¬
` return status;¬
`}¬

`
`Page 12 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/bea…/…/main/framer.c
`Page 13/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`518
`519
`520
`521
`522
`523
`524
`525
`526
`527
`528
`529
`530
`531
`532
`533
`534
`535
`536
`537
`538
`539
`540
`541
`542
`543
`544
`545
`546
`547
`548
`…
`549
`550
`…
`551
`552
`553
`554
`555
`556
`557
`558
`559
`560
`
`/*++¬
`Routine Name:¬

` Framer_BeadUninit¬

`Routine Description:¬

` Called when Strings attempts to unload the Bead.¬

`Parameters:¬

` void *BeadContext - [in]¬
` NULL because SOS_Bead_ContextPut is never called by framer¬

`Return Value:¬

` SOS_STATUS - ¬
` Always SOS_Success¬

`--*/¬
`static¬
`SOS_STATUS¬
`Framer_BeadUninit(¬
` void *BeadContext¬
`)¬
`{¬
` SOS_DEBUGOUT_DETAIL("BeadUninit called\n");¬
` return SOS_Success;¬
`}¬

`/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`+++++¬
`Module init and uninit¬
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`+++*/¬

`/*+¬
`Routine Name:¬

` SOS_ModuleInit¬

`Routine Description:¬

` Called by Strings when this object file is loaded. It registers¬
` the framer bead with Strings.¬
`
`Page 13 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/bea…/…/main/framer.c
`Page 14/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`
`561
`562
`563
`564
`565
`566
`567
`568
`569
`570
`571
`572
`573
`574
`575
`576
`577
`578
`579
`580
`581
`582
`583
`584
`585
`586
`587
`588
`589
`590
`591
`592
`593
`594
`595
`596
`597
`598
`599
`600
`601
`602
`603
`604
`605
`

`Parameters:¬

` SOS_OBJECTFILE* ObjectFile - [in]¬
` The object file that is being loaded. ¬

` SOS_REGOBJECT* RegistryHandle - [in]¬
` A pointer to a configuration file for this objectfile¬
` (currently NULL)¬

`Return Value:¬

` SOS_STATUS - ¬
` SOS_Success, is returned is SOS_Bead_Register succeeded¬
` otherwise an error code is returned.¬

`--*/¬
`SOS_STATUS¬
`SOS_ModuleInit (¬
` SOS_OBJECTFILE *ObjectFile,¬
` SOS_REGOBJECT *InitContext¬
`)¬
`{¬
` SOS_STATUS status;¬
` ¬
` SOS_DEBUGOUT_DETAIL("SOS_ModuleInit called\n");¬

` /* register the Bead */¬
` status = SOS_Bead_Register(¬
` ObjectFile,¬
` BEAD_NAME,¬
` NULL, /* Bead context */¬
` Framer_BeadInit,¬
` Framer_BeadUninit,¬
` Framer_SessionInit,¬
` Framer_SessionUninit¬
` );¬

` return status;¬
`}¬

`/*+¬
`Routine Name:¬

` SOS_ModuleUninit¬
`
`Page 14 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

`

`/Users/implicit/Desktop/Source Code/2001.11.01/bea…/…/main/framer.c
`Page 15/15
`Saved: 10/11/01, 12:32:53 PM
`Printed for: Implicit
`

`Routine Description:¬

` Called by Strings when this object file is unloaded. It does¬
` nothing because the bead is unloaded before the¬
` module uninit is ever called.¬

`Parameters:¬

` SOS_OBJECTFILE* ObjectFile - [in]¬
` The object file that is being unloaded.¬

`Return Value:¬

` None.¬

`--*/¬
`void¬
`SOS_ModuleUninit (¬
` SOS_OBJECTFILE *ObjectFile¬
`)¬
`{¬
` SOS_DEBUGOUT_DETAIL("SOS_ModuleUninit called\n");¬
`}¬
`
`606
`607
`608
`609
`610
`611
`612
`613
`614
`615
`616
`617
`618
`619
`620
`621
`622
`623
`624
`625
`626
`627
`628
`629
`630
`
`Page 15 of 15
`
`Implicit Exhibit 2047
`Sonos v. Implicit, IPR2018-0766, -0767
`
`

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket