本文整理汇总了Golang中github.com/project-iris/iris/proto/stream.Stream.Flush方法的典型用法代码示例。如果您正苦于以下问题:Golang Stream.Flush方法的具体用法?Golang Stream.Flush怎么用?Golang Stream.Flush使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/project-iris/iris/proto/stream.Stream
的用法示例。
在下文中一共展示了Stream.Flush方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: serverAuth
// Executes the server side authentication and returns either the agreed secret
// session key or the a failure reason.
func (l *Listener) serverAuth(strm *stream.Stream, req *authRequest) ([]byte, error) {
// Create a new STS session
stsSess, err := sts.New(rand.Reader, config.StsGroup, config.StsGenerator,
config.StsCipher, config.StsCipherBits, config.StsSigHash)
if err != nil {
return nil, fmt.Errorf("failed to create STS session: %v", err)
}
// Accept the incoming key exchange request and send back own exp + auth token
exp, token, err := stsSess.Accept(rand.Reader, l.key, req.Exp)
if err != nil {
return nil, fmt.Errorf("failed to accept incoming exchange: %v", err)
}
if err = strm.Send(authChallenge{exp, token}); err != nil {
return nil, fmt.Errorf("failed to encode auth challenge: %v", err)
}
if err = strm.Flush(); err != nil {
return nil, fmt.Errorf("failed to flush auth challenge: %v", err)
}
// Receive the foreign auth token and if verifies conclude session
resp := new(authResponse)
if err = strm.Recv(resp); err != nil {
return nil, fmt.Errorf("failed to decode auth response: %v", err)
}
if err = stsSess.Finalize(&l.key.PublicKey, resp.Token); err != nil {
return nil, fmt.Errorf("failed to finalize exchange: %v", err)
}
return stsSess.Secret()
}
示例2: clientAuth
// Client side of the STS session negotiation.
func clientAuth(strm *stream.Stream, key *rsa.PrivateKey) ([]byte, error) {
// Set an overall time limit for the handshake to complete
strm.Sock().SetDeadline(time.Now().Add(config.SessionShakeTimeout))
defer strm.Sock().SetDeadline(time.Time{})
// Create a new empty session
stsSess, err := sts.New(rand.Reader, config.StsGroup, config.StsGenerator, config.StsCipher, config.StsCipherBits, config.StsSigHash)
if err != nil {
return nil, fmt.Errorf("failed to create new session: %v", err)
}
// Initiate a key exchange, send the exponential
exp, err := stsSess.Initiate()
if err != nil {
return nil, fmt.Errorf("failed to initiate key exchange: %v", err)
}
req := &initRequest{
Auth: &authRequest{exp},
}
if err = strm.Send(req); err != nil {
return nil, fmt.Errorf("failed to send auth request: %v", err)
}
if err = strm.Flush(); err != nil {
return nil, fmt.Errorf("failed to flush auth request: %v", err)
}
// Receive the foreign exponential and auth token and if verifies, send own auth
chall := new(authChallenge)
if err = strm.Recv(chall); err != nil {
return nil, fmt.Errorf("failed to receive auth challenge: %v", err)
}
token, err := stsSess.Verify(rand.Reader, key, &key.PublicKey, chall.Exp, chall.Token)
if err != nil {
return nil, fmt.Errorf("failed to verify acceptor auth token: %v", err)
}
if err = strm.Send(authResponse{token}); err != nil {
return nil, fmt.Errorf("failed to send auth response: %v", err)
}
if err = strm.Flush(); err != nil {
return nil, fmt.Errorf("failed to flush auth response: %v", err)
}
return stsSess.Secret()
}