aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--draft-summermatter-set-union.xml302
-rw-r--r--statemaschine/full_diag.jpgbin0 -> 160098 bytes
-rw-r--r--statemaschine/full_state_maschine.xml1
3 files changed, 275 insertions, 28 deletions
diff --git a/draft-summermatter-set-union.xml b/draft-summermatter-set-union.xml
index bbe1b2c..67aacf6 100644
--- a/draft-summermatter-set-union.xml
+++ b/draft-summermatter-set-union.xml
@@ -187,9 +187,30 @@
187 187
188 <section anchor="modeofoperation" numbered="true" toc="default"> 188 <section anchor="modeofoperation" numbered="true" toc="default">
189 <name>Mode of operation</name> 189 <name>Mode of operation</name>
190 <t>
191 The set union protocol uses the above discussed topics Invertible Bloom Filter and Strata Estimators.
192 Depending on the state of the two sets there are different strategies or operation modes how to efficiently
193 determinate missing elements in two sets of two peers.
194 </t>
190 <section anchor="modeofoperation_full-sync-client-with-bigger-set" numbered="true" toc="default"> 195 <section anchor="modeofoperation_full-sync-client-with-bigger-set" numbered="true" toc="default">
191 <name>Full sync mode</name> 196 <name>Full sync mode</name>
192 <t>--- TEXT HERE ---</t> 197 <t>
198 The simples mode is the full sync mode. The idea is that if the difference between the sets of the two
199 peers exceeds a certain threshold the overhead of determinate which elements are different overweight's
200 the overhead of sending the complete set. In this case its more efficient to just exchange the full set.
201 </t>
202 <t>
203 After the initiating peer (Client) opened a connection to the other peer (Server) the Server answers
204 with a SE(C) of his set and changes to the "Expecting IBF" state. When the client receives the SE(C)
205 from the server and the client set size is smaller or equal to the set size of the server the client
206 changes from the Expect SE State to Full Sending State and starts sending Full element requests containing the set
207 of the client.
208 If the set size of the client is larger than the servers set size the client changes into Full Receiving
209 (HINT: EXPECT IBF in code) mode an sends a Request Full message to the server.
210 </t>
211 <t>
212 If the Server receives
213 </t>
193 </section> 214 </section>
194 <section anchor="modeofoperation_individual-elements" numbered="true" toc="default"> 215 <section anchor="modeofoperation_individual-elements" numbered="true" toc="default">
195 <name>Individual element sync mode</name> 216 <name>Individual element sync mode</name>
@@ -412,11 +433,43 @@
412 <section anchor="messages_offer_description" numbered="true" toc="default"> 433 <section anchor="messages_offer_description" numbered="true" toc="default">
413 <name>Description</name> 434 <name>Description</name>
414 <t> 435 <t>
415 Some description what this messages does 436 The offer message tells the other peer which hashes match a given IBF key.
437 This is needed to enable the peer to send a demand for a element that is missing
438 in the set.
439
416 </t> 440 </t>
417 </section> 441 </section>
418 <section anchor="messages_offer_structure" numbered="true" toc="default"> 442 <section anchor="messages_offer_structure" numbered="true" toc="default">
419 <name>Structure</name> 443 <name>Structure</name>
444 <figure anchor="figure_offer">
445 <artwork name="" type="" align="left" alt=""><![CDATA[
446 0 8 16 24 32 40 48 56
447 +-----+-----+-----+-----+-----+-----+-----+-----+
448 | MSG SIZE | MSG TYPE | GNUNET HASH
449 +-----+-----+-----+-----+
450 / /
451 / /
452 ]]></artwork>
453 <!-- <postamble>which is a very simple example.</postamble>-->
454 </figure>
455 <t>where:</t>
456 <dl>
457 <dt>MSG SIZE</dt>
458 <dd>
459 is a 16-bit unsigned integer of the GNUNET header which describes the size
460 of the message.
461 </dd>
462 <dt>MSG TYPE</dt>
463 <dd>
464 is a 16-bit unsigned integer of the GNUNET header which contains a message number
465 in the GNUNET Protocol. For this message the number is 562.
466
467 </dd>
468 <dt>GNUNET HASH</dt>
469 <dd>
470 is a 512-bit GNUNET Hash of the element that is requested with a inquiry message.
471 </dd>
472 </dl>
420 </section> 473 </section>
421 </section> 474 </section>
422 475
@@ -427,11 +480,41 @@
427 <section anchor="messages_inquiry_description" numbered="true" toc="default"> 480 <section anchor="messages_inquiry_description" numbered="true" toc="default">
428 <name>Description</name> 481 <name>Description</name>
429 <t> 482 <t>
430 Some description what this messages does 483 The Inquiry message tells the other peer to send an offer containing the element hash for the given Key of the IBF.
484 NOTE: HERE IS AN IMPLEMENTATION BUG UNNECESSARY 32-BIT PADDING!
431 </t> 485 </t>
432 </section> 486 </section>
433 <section anchor="messages_inquiry_structure" numbered="true" toc="default"> 487 <section anchor="messages_inquiry_structure" numbered="true" toc="default">
434 <name>Structure</name> 488 <name>Structure</name>
489 <figure anchor="figure_inquiry">
490 <artwork name="" type="" align="left" alt=""><![CDATA[
491 0 8 16 24 32 40 48 56
492 +-----+-----+-----+-----+-----+-----+-----+-----+
493 | MSG SIZE | MSG TYPE | SALT |
494 +-----+-----+-----+-----+-----+-----+-----+-----+
495 | IBF KEY |
496 +-----+-----+-----+-----+-----+-----+-----+-----+
497 ]]></artwork>
498 <!-- <postamble>which is a very simple example.</postamble>-->
499 </figure>
500 <t>where:</t>
501 <dl>
502 <dt>MSG SIZE</dt>
503 <dd>
504 is a 16-bit unsigned integer of the GNUNET header which describes the size
505 of the message.
506 </dd>
507 <dt>MSG TYPE</dt>
508 <dd>
509 is a 16-bit unsigned integer of the GNUNET header which contains a message number
510 in the GNUNET Protocol. For this message the number is 561.
511
512 </dd>
513 <dt>IBF KEY</dt>
514 <dd>
515 is a 64-bit unsigned integer that contains the key for which the inquiry is sent.
516 </dd>
517 </dl>
435 </section> 518 </section>
436 </section> 519 </section>
437 520
@@ -441,11 +524,40 @@
441 <section anchor="messages_demand_description" numbered="true" toc="default"> 524 <section anchor="messages_demand_description" numbered="true" toc="default">
442 <name>Description</name> 525 <name>Description</name>
443 <t> 526 <t>
444 Some description what this messages does 527 The Demand message requests the whole element for a defined Hash from the other peer
445 </t> 528 </t>
446 </section> 529 </section>
447 <section anchor="messages_demand_structure" numbered="true" toc="default"> 530 <section anchor="messages_demand_structure" numbered="true" toc="default">
448 <name>Structure</name> 531 <name>Structure</name>
532 <figure anchor="figure_demand">
533 <artwork name="" type="" align="left" alt=""><![CDATA[
534 0 8 16 24 32 40 48 56
535 +-----+-----+-----+-----+-----+-----+-----+-----+
536 | MSG SIZE | MSG TYPE | GNUNET HASH
537 +-----+-----+-----+-----+
538 / /
539 / /
540 ]]></artwork>
541 <!-- <postamble>which is a very simple example.</postamble>-->
542 </figure>
543 <t>where:</t>
544 <dl>
545 <dt>MSG SIZE</dt>
546 <dd>
547 is a 16-bit unsigned integer of the GNUNET header which describes the size
548 of the message.
549 </dd>
550 <dt>MSG TYPE</dt>
551 <dd>
552 is a 16-bit unsigned integer of the GNUNET header which contains a message number
553 in the GNUNET Protocol. For this message the number is 560.
554
555 </dd>
556 <dt>GNUNET HASH</dt>
557 <dd>
558 is a 512-bit GNUNET Hash of the element that is demanded.
559 </dd>
560 </dl>
449 </section> 561 </section>
450 </section> 562 </section>
451 563
@@ -455,11 +567,34 @@
455 <section anchor="messages_done_description" numbered="true" toc="default"> 567 <section anchor="messages_done_description" numbered="true" toc="default">
456 <name>Description</name> 568 <name>Description</name>
457 <t> 569 <t>
458 Some description what this messages does 570 The done message signals to the other peer that set operation is done
459 </t> 571 </t>
460 </section> 572 </section>
461 <section anchor="messages_done_structure" numbered="true" toc="default"> 573 <section anchor="messages_done_structure" numbered="true" toc="default">
462 <name>Structure</name> 574 <name>Structure</name>
575 <figure anchor="figure_done">
576 <artwork name="" type="" align="left" alt=""><![CDATA[
577 0 8 16 24 32
578 +-----+-----+-----+-----+
579 | MSG SIZE | MSG TYPE |
580 +-----+-----+-----+-----+
581 ]]></artwork>
582 <!-- <postamble>which is a very simple example.</postamble>-->
583 </figure>
584 <t>where:</t>
585 <dl>
586 <dt>MSG SIZE</dt>
587 <dd>
588 is a 16-bit unsigned integer of the GNUNET header which describes the size
589 of the message.
590 </dd>
591 <dt>MSG TYPE</dt>
592 <dd>
593 is a 16-bit unsigned integer of the GNUNET header which contains a message number
594 in the GNUNET Protocol. For this message the number is 568.
595
596 </dd>
597 </dl>
463 </section> 598 </section>
464 </section> 599 </section>
465 600
@@ -469,11 +604,34 @@
469 <section anchor="messages_full_done_description" numbered="true" toc="default"> 604 <section anchor="messages_full_done_description" numbered="true" toc="default">
470 <name>Description</name> 605 <name>Description</name>
471 <t> 606 <t>
472 Some description what this messages does 607 Signals to the other peer that all elements of the set have been sent.
473 </t> 608 </t>
474 </section> 609 </section>
475 <section anchor="messages_full_done_structure" numbered="true" toc="default"> 610 <section anchor="messages_full_done_structure" numbered="true" toc="default">
476 <name>Structure</name> 611 <name>Structure</name>
612 <figure anchor="figure_full_done">
613 <artwork name="" type="" align="left" alt=""><![CDATA[
614 0 8 16 24 32
615 +-----+-----+-----+-----+
616 | MSG SIZE | MSG TYPE |
617 +-----+-----+-----+-----+
618 ]]></artwork>
619 <!-- <postamble>which is a very simple example.</postamble>-->
620 </figure>
621 <t>where:</t>
622 <dl>
623 <dt>MSG SIZE</dt>
624 <dd>
625 is a 16-bit unsigned integer of the GNUNET header which describes the size
626 of the message.
627 </dd>
628 <dt>MSG TYPE</dt>
629 <dd>
630 is a 16-bit unsigned integer of the GNUNET header which contains a message number
631 in the GNUNET Protocol. For this message the number is 570.
632
633 </dd>
634 </dl>
477 </section> 635 </section>
478 </section> 636 </section>
479 637
@@ -483,11 +641,34 @@
483 <section anchor="messages_request_full_description" numbered="true" toc="default"> 641 <section anchor="messages_request_full_description" numbered="true" toc="default">
484 <name>Description</name> 642 <name>Description</name>
485 <t> 643 <t>
486 Some description what this messages does 644 Initiates a full sync and tells the other peer to send all elements.
487 </t> 645 </t>
488 </section> 646 </section>
489 <section anchor="messages_request_full_structure" numbered="true" toc="default"> 647 <section anchor="messages_request_full_structure" numbered="true" toc="default">
490 <name>Structure</name> 648 <name>Structure</name>
649 <figure anchor="figure_request_full">
650 <artwork name="" type="" align="left" alt=""><![CDATA[
651 0 8 16 24 32
652 +-----+-----+-----+-----+
653 | MSG SIZE | MSG TYPE |
654 +-----+-----+-----+-----+
655 ]]></artwork>
656 <!-- <postamble>which is a very simple example.</postamble>-->
657 </figure>
658 <t>where:</t>
659 <dl>
660 <dt>MSG SIZE</dt>
661 <dd>
662 is a 16-bit unsigned integer of the GNUNET header which describes the size
663 of the message.
664 </dd>
665 <dt>MSG TYPE</dt>
666 <dd>
667 is a 16-bit unsigned integer of the GNUNET header which contains a message number
668 in the GNUNET Protocol. For this message the number is 559.
669
670 </dd>
671 </dl>
491 </section> 672 </section>
492 </section> 673 </section>
493 674
@@ -497,11 +678,45 @@
497 <section anchor="messages_se_description" numbered="true" toc="default"> 678 <section anchor="messages_se_description" numbered="true" toc="default">
498 <name>Description</name> 679 <name>Description</name>
499 <t> 680 <t>
500 Some description what this messages does 681 The Strata Estimator message contains the strata estimator.
501 </t> 682 </t>
502 </section> 683 </section>
503 <section anchor="messages_se_structure" numbered="true" toc="default"> 684 <section anchor="messages_se_structure" numbered="true" toc="default">
504 <name>Structure</name> 685 <name>Structure</name>
686 <figure anchor="figure_se">
687 <artwork name="" type="" align="left" alt=""><![CDATA[
688 0 8 16 24 32 40 48 56
689 +-----+-----+-----+-----+-----+-----+-----+-----+
690 | MSG SIZE | MSG TYPE | SETSIZE
691 +-----+-----+-----+-----+-----+-----+-----+-----+
692 SETSIZE | SE-SLICES
693 +-----+-----+-----+-----+
694 / /
695 / /
696 ]]></artwork>
697 <!-- <postamble>which is a very simple example.</postamble>-->
698 </figure>
699 <t>where:</t>
700 <dl>
701 <dt>MSG SIZE</dt>
702 <dd>
703 is a 16-bit unsigned integer of the GNUNET header which describes the size
704 of the message.
705 </dd>
706 <dt>MSG TYPE</dt>
707 <dd>
708 is a 16-bit unsigned integer of the GNUNET header which contains a message number
709 in the GNUNET Protocol. For this message the number is 564.
710 </dd>
711 <dt>SETSIZE</dt>
712 <dd>
713 is a 64-bit unsigned integer that is defined by the size of the set the SE is
714 </dd>
715 <dt>SE-SLICES</dt>
716 <dd>
717 is variable in size and contains the same structure as the IBF-SLICES field in the IBF message.
718 </dd>
719 </dl>
505 </section> 720 </section>
506 </section> 721 </section>
507 722
@@ -511,12 +726,10 @@
511 <section anchor="messages_sec_description" numbered="true" toc="default"> 726 <section anchor="messages_sec_description" numbered="true" toc="default">
512 <name>Description</name> 727 <name>Description</name>
513 <t> 728 <t>
514 Some description what this messages does 729 The Strata Estimator Compressed is the same message as the Strata Estimator message but the
730 field "SE-SLICES" is with gzip compressed and the MSG TYPE is 565.
515 </t> 731 </t>
516 </section> 732 </section>
517 <section anchor="messages_sec_structure" numbered="true" toc="default">
518 <name>Structure</name>
519 </section>
520 </section> 733 </section>
521 734
522 735
@@ -526,26 +739,59 @@
526 <section anchor="messages_full_element_description" numbered="true" toc="default"> 739 <section anchor="messages_full_element_description" numbered="true" toc="default">
527 <name>Description</name> 740 <name>Description</name>
528 <t> 741 <t>
529 Some description what this messages does 742 The Full Element message sends a set of elements because of a peer full sync operation mode.
530 </t> 743 </t>
531 </section> 744 </section>
532 <section anchor="messages_full_element_structure" numbered="true" toc="default"> 745 <section anchor="messages_full_element_structure" numbered="true" toc="default">
533 <name>Structure</name> 746 <name>Structure</name>
534 </section> 747 <figure anchor="figure_full_element">
535 </section> 748 <artwork name="" type="" align="left" alt=""><![CDATA[
536 749 0 8 16 24 32 40 48 56
537 750 +-----+-----+-----+-----+-----+-----+-----+-----+
538 <section anchor="messages_element_requests" numbered="true" toc="default"> 751 | MSG SIZE | MSG TYPE | E TYPE | PADDING |
539 <name>Element Requests</name> 752 +-----+-----+-----+-----+-----+-----+-----+-----+
540 753 | SIZE | AE TYPE | DATA
541 <section anchor="messages_element_requests_description" numbered="true" toc="default"> 754 +-----+-----+-----+-----+
542 <name>Description</name> 755 / /
543 <t> 756 / /
544 Some description what this messages does 757 ]]></artwork>
545 </t> 758 <!-- <postamble>which is a very simple example.</postamble>-->
546 </section> 759 </figure>
547 <section anchor="messages_element_requests_structure" numbered="true" toc="default"> 760 <t>where:</t>
548 <name>Structure</name> 761 <dl>
762 <dt>MSG SIZE</dt>
763 <dd>
764 is a 16-bit unsigned integer of the GNUNET header which describes the size
765 of the message.
766 </dd>
767 <dt>MSG TYPE</dt>
768 <dd>
769 is a 16-bit unsigned integer of the GNUNET header which contains a message number
770 in the GNUNET Protocol. For this message the number is 571.
771 </dd>
772 <dt>E TYPE</dt>
773 <dd>
774 element type is a 16-bit unsigned integer witch defines the element type for
775 the application.
776 </dd>
777 <dt>PADDING</dt>
778 <dd>
779 is 16-bit always set to zero
780 </dd>
781 <dt>E SIZE</dt>
782 <dd>
783 element size is 16-bit unsigned integer that signals the size of the elements data part.
784 </dd>
785 <dt>AE TYPE</dt>
786 <dd>
787 application specific element type is a 16-bit unsigned integer that is needed to identify
788 the type of element that is in the data field
789 </dd>
790 <dt>DATA</dt>
791 <dd>
792 is a field with variable length that contains the data of the element.
793 </dd>
794 </dl>
549 </section> 795 </section>
550 </section> 796 </section>
551 797
diff --git a/statemaschine/full_diag.jpg b/statemaschine/full_diag.jpg
new file mode 100644
index 0000000..3c89533
--- /dev/null
+++ b/statemaschine/full_diag.jpg
Binary files differ
diff --git a/statemaschine/full_state_maschine.xml b/statemaschine/full_state_maschine.xml
new file mode 100644
index 0000000..e850445
--- /dev/null
+++ b/statemaschine/full_state_maschine.xml
@@ -0,0 +1 @@
<mxfile host="embed.diagrams.net" modified="2020-12-03T15:05:28.830Z" agent="5.0 (X11)" etag="UdxWVrhVWdTqgWMnNU7v" version="13.9.9" type="embed"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile> \ No newline at end of file