• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Golang stream.Stream类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Golang中github.com/ermine/bullxmpp/stream.Stream的典型用法代码示例。如果您正苦于以下问题:Golang Stream类的具体用法?Golang Stream怎么用?Golang Stream使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了Stream类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。

示例1: Negotate

func (t *BindFeature) Negotate(strm *stream.Stream) error {
	if strm.Jid.Resource != "" {
		t.Resource = &strm.Jid.Resource
	}
	id := strconv.Itoa(rand.Intn(1000))
	iq := Iq{To: strm.Jid.Server(), Id: &id, Payload: t}
	typ := IqTypeSet
	iq.Type = &typ
	if err := strm.Send(&iq); err != nil {
		return err
	}
	resp, err := strm.Read()
	if err != nil {
		return err
	}
	if resp == nil {
		return stream.ErrUnexpectedEOF
	}
	switch rsp := resp.(type) {
	case *Iq:
		if rsp.Type != nil && *rsp.Type == IqTypeResult && rsp.Payload != nil {
			if newt, ok := rsp.Payload.(*BindFeature); ok {
				if newt.Jid != nil {
					strm.Jid = newt.Jid
					return nil
				}
			} else {
				return stream.ErrMalformedProtocol
			}
		}
	case *stream.Error:
		return rsp
	}
	return stream.ErrMalformedProtocol
}
开发者ID:oxpa,项目名称:bullxmpp,代码行数:35,代码来源:bind_feature.go


示例2: turnTLS

func turnTLS(strm *stream.Stream) error {
	DefaultConfig.ServerName = strm.Jid.Domain
	tlsconn := tls.Client(strm.Conn, &DefaultConfig)
	if err := tlsconn.Handshake(); err != nil {
		return err
	}
	strm.Conn = tlsconn
	return nil
}
开发者ID:oxpa,项目名称:bullxmpp,代码行数:9,代码来源:tls_feature.go


示例3: Negotate

func (t *TLSFeature) Negotate(strm *stream.Stream) error {
	if err := strm.Send(t); err != nil {
		return err
	}
	data, err := strm.Read()
	if err != nil {
		return err
	}
	if data == nil {
		return stream.ErrUnexpectedEOF
	}
	switch resp := data.(type) {
	case *starttls.Proceed:
		return turnTLS(strm)
	case *starttls.Failure:
		return resp
	}
	return stream.ErrMalformedProtocol
}
开发者ID:oxpa,项目名称:bullxmpp,代码行数:19,代码来源:tls_feature.go


示例4: sasl_PLAIN

func sasl_PLAIN(strm *stream.Stream, password string) error {
	var err error
	data := "\x00" + strm.Jid.Node + "\x00" + password
	method := "PLAIN"
	if err = strm.Send(&sasl.Auth{&method, base64_encode(data)}); err != nil {
		return err
	}
	resp, err := strm.Read()
	if err != nil {
		return err
	}
	switch resp := resp.(type) {
	case *sasl.Success:
		return nil
	case *sasl.Failure:
		return resp
	case *stream.Error:
		return resp
	}
	return stream.ErrMalformedProtocol
}
开发者ID:oxpa,项目名称:bullxmpp,代码行数:21,代码来源:sasl_feature.go


示例5: Negotate

func (t *SessionFeature) Negotate(strm *stream.Stream) error {
	id := strconv.Itoa(rand.Intn(1000))
	typ := IqTypeSet
	iq := Iq{From: strm.Jid, Id: &id, Payload: t, Type: &typ}
	if err := strm.Send(&iq); err != nil {
		return err
	}
	resp, err := strm.Read()
	if err != nil {
		return err
	}
	if resp == nil {
		return stream.ErrUnexpectedEOF
	}
	switch resp := resp.(type) {
	case *Iq:
		if resp.Type != nil && *resp.Type == IqTypeResult {
			return nil
		}
	case *stream.Error:
		return resp
	}
	return stream.ErrMalformedProtocol
}
开发者ID:oxpa,项目名称:bullxmpp,代码行数:24,代码来源:session_feature.go


示例6: sasl_DIGEST_MD5

func sasl_DIGEST_MD5(strm *stream.Stream, password string) error {
	var err error
	var resp interface{}
	method := "DIGEST-MD5"
	if err = strm.Send(&sasl.Auth{&method, []byte{}}); err != nil {
		return err
	}
	resp, err = strm.Read()
	if err != nil {
		return err
	}
	if resp == nil {
		return stream.ErrUnexpectedEOF
	}
	switch rsp := resp.(type) {
	case *sasl.Challenge:
		var t []byte
		if t, err = base64.StdEncoding.DecodeString(string(rsp.Data)); err != nil {
			return err
		}
		var tokens map[string]string
		if tokens, err = get_map(t); err != nil {
			return err
		}
		nonce := tokens["nonce"]
		cnonce := make_cnonce()
		nc := "00000001"
		digest_uri := "xmpp/" + strm.Jid.Domain
		realm := strm.Jid.Domain
		qop_list := strings.Split(tokens["qop"], ",")
		exists := false
		for _, x := range qop_list {
			if x == "auth" {
				exists = true
				break
			}
		}
		if !exists {
			return errors.New("No known qop method")
		}
		qop := "auth"
		a0 := md5_sum([]byte(strm.Jid.Node + ":" + realm + ":" + password))
		a1 := string(a0) + ":" + nonce + ":" + cnonce
		a2 := "AUTHENTICATE:" + digest_uri
		t = []byte(hex(md5_sum([]byte(a1))) + ":" + nonce + ":" + nc + ":" + cnonce +
			":" + qop + ":" + hex(md5_sum([]byte(a2))))
		response := hex(md5_sum(t))
		response = `charset=utf-8,username="` + strm.Jid.Node + `",realm="` + realm +
			`",nonce=` + nonce + ",cnonce=" + cnonce + ",nc=" + nc +
			`,qop="` + qop + `",digest-uri="` + digest_uri + `",response=` + response
		if err = strm.Send(&sasl.Response{base64_encode(response)}); err != nil {
			return err
		}
		resp, err = strm.Read()
		if err != nil {
			return err
		}
		if resp == nil {
			return stream.ErrUnexpectedEOF
		}
		switch rsp := resp.(type) {
		case *sasl.Challenge:
			if err = strm.Send(&sasl.Response{}); err != nil {
				return err
			}
			if resp, err = strm.Read(); err != nil {
				return err
			}
			if resp == nil {
				return stream.ErrUnexpectedEOF
			}
			switch rsp := resp.(type) {
			case *sasl.Success:
				return nil
			case *sasl.Failure:
				return rsp
			case *stream.Error:
				return rsp
			}
		case *sasl.Failure:
			return rsp
		case *stream.Error:
			return rsp
		}
	}
	return stream.ErrMalformedProtocol
}
开发者ID:oxpa,项目名称:bullxmpp,代码行数:87,代码来源:sasl_feature.go


示例7: sasl_SCRAM_SHA_1

func sasl_SCRAM_SHA_1(strm *stream.Stream, password string) error {
	var err error
	var resp interface{}
	cnonce := make_cnonce()
	clientFirstMessageBare := "n=" + strm.Jid.Node + ",r=" + cnonce
	data := "n,," + clientFirstMessageBare
	method := "SCRAM-SHA-1"
	if err = strm.Send(&sasl.Auth{&method, base64_encode(data)}); err != nil {
		return err
	}
	if resp, err = strm.Read(); err != nil {
		return err
	}
	if resp == nil {
		return stream.ErrUnexpectedEOF
	}
	switch rsp := resp.(type) {
	case *sasl.Challenge:
		var t []byte
		if t, err = base64.StdEncoding.DecodeString(string(rsp.Data)); err != nil {
			return err
		}
		ch := string(t)
		serverFirstMessage := ch
		tokens := scram_attributes(ch)
		var salt []byte
		if salt, err = base64.StdEncoding.DecodeString(tokens["s"]); err != nil {
			return err
		}
		i, _ := strconv.Atoi(tokens["i"])
		r := tokens["r"]
		saltedpassword := scram_Hi([]byte(jid.Resourceprep(password)), salt, i)
		clientKey := scram_HMAC(saltedpassword, []byte("Client Key"))
		storedKey := scram_H(clientKey)
		clientFinalMessageWithoutProof := "c=biws,r=" + r
		authMessage := []byte(clientFirstMessageBare + "," + serverFirstMessage + "," +
			clientFinalMessageWithoutProof)
		clientSignature := scram_HMAC(storedKey, []byte(authMessage))
		clientProof := scram_XOR(clientKey, clientSignature)
		serverKey := scram_HMAC(saltedpassword, []byte("Server Key"))
		serverSignature := scram_HMAC(serverKey, authMessage)
		response := clientFinalMessageWithoutProof + ",p=" + string(base64_encode(string(clientProof)))
		if err = strm.Send(&sasl.Response{base64_encode(response)}); err != nil {
			return err
		}
		if resp, err = strm.Read(); err != nil {
			return err
		}
		if resp == nil {
			return stream.ErrUnexpectedEOF
		}
		switch rsp := resp.(type) {
		case *sasl.Success:
			var t []byte
			if t, err = base64.StdEncoding.DecodeString(string(rsp.Data)); err != nil {
				return err
			}
			tokens = scram_attributes(string(t))
			v := tokens["v"]
			if t, err = base64.StdEncoding.DecodeString(v); err != nil {
				return err
			}
			if string(t) != string(serverSignature) {
				return errors.New("Server Signature mismatch")
			}

			return nil
		case *sasl.Failure:
			return rsp
		case *stream.Error:
			return rsp
		}
	case *sasl.Failure:
		return rsp
	case *stream.Error:
		return rsp
	}
	return stream.ErrMalformedProtocol
}
开发者ID:oxpa,项目名称:bullxmpp,代码行数:79,代码来源:sasl_feature.go



注:本文中的github.com/ermine/bullxmpp/stream.Stream类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Golang xmlencoder.AddExtension函数代码示例发布时间:2022-05-23
下一篇:
Golang account.PubKey类代码示例发布时间:2022-05-23
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap