`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
`
`