Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
client
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
elixxir
client
Commits
5571a212
Commit
5571a212
authored
Sep 30, 2020
by
Richard T. Carback III
Browse files
Options
Downloads
Patches
Plain Diff
Initial SendCMIX hookup
parent
da815259
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
api/client.go
+14
-0
14 additions, 0 deletions
api/client.go
api/send.go
+11
-0
11 additions, 0 deletions
api/send.go
cmd/root.go
+61
-75
61 additions, 75 deletions
cmd/root.go
with
86 additions
and
75 deletions
api/client.go
+
14
−
0
View file @
5571a212
...
...
@@ -10,6 +10,7 @@ import (
"github.com/pkg/errors"
jww
"github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/interfaces"
"gitlab.com/elixxir/client/interfaces/message"
"gitlab.com/elixxir/client/interfaces/params"
"gitlab.com/elixxir/client/interfaces/user"
"gitlab.com/elixxir/client/keyExchange"
...
...
@@ -332,6 +333,13 @@ func (c *Client) GetUser() user.User {
return
c
.
storage
.
GetUser
()
}
// RegisterListenerCallback records and installs a listener callback for
// messages matching specific uid, msgType, and/or username
func
(
c
*
Client
)
RegisterListenerCallback
(
uid
[]
byte
,
msgType
int
,
username
string
,
listenerCb
func
(
msg
message
.
Receive
))
{
}
// ----- Utility Functions -----
// parseNDF parses the initial ndf string for the client. do not check the
// signature, it is deprecated.
...
...
@@ -348,6 +356,12 @@ func parseNDF(ndfString string) (*ndf.NetworkDefinition, error) {
return
ndf
,
nil
}
func
(
c
*
Client
)
getCMIXPrimeSize
()
int
{
ndf
:=
c
.
network
.
GetInstance
()
.
GetPartialNdf
()
.
Get
()
cmixGrp
,
_
:=
decodeGroups
(
ndf
)
return
len
(
cmixGrp
.
GetPBytes
())
}
// decodeGroups returns the e2e and cmix groups from the ndf
func
decodeGroups
(
ndf
*
ndf
.
NetworkDefinition
)
(
cmixGrp
,
e2eGrp
*
cyclic
.
Group
)
{
largeIntBits
:=
16
...
...
This diff is collapsed.
Click to expand it.
api/send.go
+
11
−
0
View file @
5571a212
...
...
@@ -40,3 +40,14 @@ func (c *Client) SendCMIX(msg format.Message, param params.CMIX) (id.Round,
jww
.
INFO
.
Printf
(
"SendCMIX(%v)"
,
msg
)
return
c
.
network
.
SendCMIX
(
msg
,
param
)
}
// NewCMIXMessage Creates a new cMix message with the right properties
// for the current cMix network.
// FIXME: this is weird and shouldn't be necessary, but it is.
func
(
c
*
Client
)
NewCMIXMessage
(
recipient
*
id
.
ID
,
contents
[]
byte
)
format
.
Message
{
msg
:=
format
.
NewMessage
(
c
.
getCMIXPrimeSize
())
msg
.
SetContents
(
contents
)
msg
.
SetRecipientID
(
recipient
)
return
msg
}
This diff is collapsed.
Click to expand it.
cmd/root.go
+
61
−
75
View file @
5571a212
...
...
@@ -9,15 +9,18 @@ package cmd
import
(
"encoding/binary"
"encoding/hex"
"fmt"
"github.com/spf13/cobra"
jww
"github.com/spf13/jwalterweatherman"
"github.com/spf13/viper"
"gitlab.com/elixxir/client/api"
"gitlab.com/elixxir/client/interfaces/params"
"gitlab.com/xx_network/primitives/id"
"io/ioutil"
"os"
"strconv"
"time"
)
var
verbose
bool
...
...
@@ -94,61 +97,6 @@ func Execute() {
// params.MinNumKeys = uint16(minNumKeys)
// }
// type FallbackListener struct {
// MessagesReceived int64
// }
// func (l *FallbackListener) Hear(item switchboard.Item, isHeardElsewhere bool, i ...interface{}) {
// if !isHeardElsewhere {
// message := item.(*parse.Message)
// sender, ok := userRegistry.Users.GetUser(message.Sender)
// var senderNick string
// if !ok {
// jww.ERROR.Printf("Couldn't get sender %v", message.Sender)
// } else {
// senderNick = sender.Username
// }
// atomic.AddInt64(&l.MessagesReceived, 1)
// jww.INFO.Printf("Message of type %v from %q, %v received with fallback: %s\n",
// message.MessageType, printIDNice(message.Sender), senderNick,
// string(message.Body))
// }
// }
// type TextListener struct {
// MessagesReceived int64
// }
// func (l *TextListener) Hear(item switchboard.Item, isHeardElsewhere bool, i ...interface{}) {
// message := item.(*parse.Message)
// jww.INFO.Println("Hearing a text message")
// result := cmixproto.TextMessage{}
// err := proto.Unmarshal(message.Body, &result)
// if err != nil {
// jww.ERROR.Printf("Error unmarshaling text message: %v\n",
// err.Error())
// }
// sender, ok := userRegistry.Users.GetUser(message.Sender)
// var senderNick string
// if !ok {
// jww.INFO.Printf("First message from sender %v", printIDNice(message.Sender))
// u := userRegistry.Users.NewUser(message.Sender, base64.StdEncoding.EncodeToString(message.Sender[:]))
// userRegistry.Users.UpsertUser(u)
// senderNick = u.Username
// } else {
// senderNick = sender.Username
// }
// logMsg := fmt.Sprintf("Message from %v, %v Received: %s\n",
// printIDNice(message.Sender),
// senderNick, result.Message)
// jww.INFO.Printf("%s -- Timestamp: %s\n", logMsg,
// message.Timestamp.String())
// fmt.Printf(logMsg)
// atomic.AddInt64(&l.MessagesReceived, 1)
// }
// type userSearcher struct {
// foundUserChan chan []byte
// }
...
...
@@ -209,7 +157,41 @@ var rootCmd = &cobra.Command{
jww
.
FATAL
.
Panicf
(
"%+v"
,
err
)
}
select
{}
// Send Messages
msgBody
:=
viper
.
GetString
(
"message"
)
recipientIDBytes
,
err
:=
hex
.
DecodeString
(
viper
.
GetString
(
"destid"
))
if
err
!=
nil
{
jww
.
FATAL
.
Panicf
(
"%+v"
,
err
)
}
recipientID
,
err
:=
id
.
Unmarshal
(
recipientIDBytes
)
if
err
!=
nil
{
jww
.
FATAL
.
Panicf
(
"%+v"
,
err
)
}
msg
:=
client
.
NewCMIXMessage
(
recipientID
,
[]
byte
(
msgBody
))
params
:=
params
.
GetDefaultCMIX
()
sendCnt
:=
int
(
viper
.
GetUint
(
"sendCount"
))
sendDelay
:=
time
.
Duration
(
viper
.
GetUint
(
"sendDelay"
))
for
i
:=
0
;
i
<
sendCnt
;
i
++
{
client
.
SendCMIX
(
msg
,
params
)
time
.
Sleep
(
sendDelay
*
time
.
Millisecond
)
}
// Wait until message timeout or we receive enough then exit
// TODO: Actually check for how many messages we've received
receiveCnt
:=
viper
.
GetUint
(
"receiveCount"
)
waitTimeout
:=
time
.
Duration
(
viper
.
GetUint
(
"waitTimeout"
))
timeoutTick
:=
time
.
NewTicker
(
waitTimeout
*
time
.
Second
)
for
{
select
{
case
<-
timeoutTick
.
C
:
fmt
.
Println
(
"Timed out!"
)
break
}
}
fmt
.
Printf
(
"Received %d"
,
receiveCnt
)
},
}
...
...
@@ -286,16 +268,34 @@ func init() {
"Path to the log output path (- is stdout)"
)
viper
.
BindPFlag
(
"log"
,
rootCmd
.
Flags
()
.
Lookup
(
"log"
))
rootCmd
.
Flags
()
.
StringP
(
"regcode"
,
"
r
"
,
""
,
rootCmd
.
Flags
()
.
StringP
(
"regcode"
,
""
,
""
,
"Registration code (optional)"
)
viper
.
BindPFlag
(
"regcode"
,
rootCmd
.
Flags
()
.
Lookup
(
"regcode"
))
rootCmd
.
Flags
()
.
StringP
(
"message"
,
"m"
,
""
,
"Message to send"
)
viper
.
BindPFlag
(
"message"
,
rootCmd
.
Flags
()
.
Lookup
(
"message"
))
rootCmd
.
Flags
()
.
StringP
(
"destid"
,
"d"
,
"0"
,
"ID to send message to (hexadecimal string up to 256 bits)"
)
viper
.
BindPFlag
(
"destid"
,
rootCmd
.
Flags
()
.
Lookup
(
"destid"
))
rootCmd
.
Flags
()
.
UintP
(
"sendCount"
,
""
,
1
,
"The number of times to send the message"
)
viper
.
BindPFlag
(
"sendCount"
,
rootCmd
.
Flags
()
.
Lookup
(
"sendCount"
))
rootCmd
.
Flags
()
.
UintP
(
"sendDelay"
,
""
,
500
,
"The delay between sending the messages in ms"
)
viper
.
BindPFlag
(
"sendCount"
,
rootCmd
.
Flags
()
.
Lookup
(
"sendCount"
))
rootCmd
.
Flags
()
.
UintP
(
"receiveCount"
,
""
,
1
,
"How many messages we should wait for before quitting"
)
viper
.
BindPFlag
(
"sendCount"
,
rootCmd
.
Flags
()
.
Lookup
(
"sendCount"
))
rootCmd
.
Flags
()
.
UintP
(
"waitTimeout"
,
""
,
15
,
"The number of seconds to wait for messages to arrive"
)
viper
.
BindPFlag
(
"waitTimeout"
,
rootCmd
.
Flags
()
.
Lookup
(
"waitTimeout"
))
// Cobra also supports local flags, which will only run
// when this action is called directly.
rootCmd
.
Flags
()
.
StringVarP
(
&
message
,
"message"
,
"m"
,
""
,
"Message to send"
)
rootCmd
.
PersistentFlags
()
.
Uint64VarP
(
&
destinationUserId
,
"destid"
,
"d"
,
0
,
"ID to send message to"
)
rootCmd
.
Flags
()
.
StringVarP
(
&
notificationToken
,
"nbRegistration"
,
"x"
,
""
,
"Token to register user with notification bot"
)
...
...
@@ -306,13 +306,6 @@ func init() {
make
([]
string
,
0
),
"Define key generation parameters. Pass values in comma separated list"
+
" in the following order: MinKeys,MaxKeys,NumRekeys,TTLScalar,MinNumKeys"
)
rootCmd
.
Flags
()
.
BoolVarP
(
&
noTLS
,
"noTLS"
,
""
,
false
,
"Set to ignore tls. Connections will fail if the network requires tls. For debugging"
)
rootCmd
.
Flags
()
.
StringVar
(
&
privateKeyPath
,
"privateKey"
,
""
,
"The path for a PEM encoded private key which will be used "
+
"to create the user"
)
rootCmd
.
Flags
()
.
StringVar
(
&
destinationUserIDBase64
,
"dest64"
,
""
,
"Sets the destination user id encoded in base 64"
)
...
...
@@ -322,13 +315,6 @@ func init() {
// rootCmd.Flags().StringVarP(&searchForUser, "SearchForUser", "s", "",
// "Sets the email to search for to find a user with user discovery")
rootCmd
.
Flags
()
.
UintVarP
(
&
messageTimeout
,
"messageTimeout"
,
"t"
,
45
,
"The number of seconds to wait for "
+
"'waitForMessages' messages to arrive"
)
rootCmd
.
Flags
()
.
UintVarP
(
&
messageCnt
,
"messageCount"
,
"c"
,
1
,
"The number of times to send the message"
)
}
// initConfig reads in config file and ENV variables if set.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment