diff --git a/CHANGELOG.md b/CHANGELOG.md
index d31be50ca..99cc7208b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
## jackal - main / unreleased
+## 0.63.0 (2023/01/05)
+
+* [ENHANCEMENT] stravaganza: improved xml parsing performance. [#283](https://github.com/ortuman/jackal/pull/283)
+
## 0.62.3 (2022/09/29)
* [BUGFIX] s2s: overwrite stanza value on received hooks [#261](https://github.com/ortuman/jackal/pull/261)
diff --git a/dockerfiles/Dockerfile b/dockerfiles/Dockerfile
index ecce659c0..91e51a654 100644
--- a/dockerfiles/Dockerfile
+++ b/dockerfiles/Dockerfile
@@ -1,4 +1,4 @@
-FROM --platform=$BUILDPLATFORM golang:1.19.3-bullseye as stage
+FROM --platform=$BUILDPLATFORM golang:1.19.4-bullseye as stage
ARG TARGETARCH
diff --git a/go.mod b/go.mod
index 3446b8149..534c3229f 100644
--- a/go.mod
+++ b/go.mod
@@ -17,7 +17,7 @@ require (
github.com/google/uuid v1.1.2
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
github.com/jackal-xmpp/runqueue/v2 v2.0.0
- github.com/jackal-xmpp/stravaganza v1.2.4
+ github.com/jackal-xmpp/stravaganza v1.5.0
github.com/kkyr/fig v0.2.0
github.com/lib/pq v1.8.0
github.com/mattn/go-sqlite3 v1.14.5 // indirect
@@ -64,7 +64,7 @@ require (
go.uber.org/zap v1.17.0 // indirect
golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect
golang.org/x/net v0.0.0-20220526153639-5463443f8c37 // indirect
- golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
+ golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e // indirect
golang.org/x/text v0.3.7 // indirect
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
diff --git a/go.sum b/go.sum
index 1a40ef4a4..a2add04da 100644
--- a/go.sum
+++ b/go.sum
@@ -225,8 +225,8 @@ github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62
github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw=
github.com/jackal-xmpp/runqueue/v2 v2.0.0 h1:QfvOfL6zF5yK1LN5TKabpj+VBuELMwtR8Xpkz0CrjoI=
github.com/jackal-xmpp/runqueue/v2 v2.0.0/go.mod h1:tXZARVqBMGeV8BTc/qDPg0qXILTUWmER7wlYbN9Xcac=
-github.com/jackal-xmpp/stravaganza v1.2.4 h1:xz3L2lNEPezOn43az4W4omK1at9tSuR4BDaWOSKo6aE=
-github.com/jackal-xmpp/stravaganza v1.2.4/go.mod h1:oesgQpMM0I5gnJM80NsEfSspzDDCArQex+oA0/swCWU=
+github.com/jackal-xmpp/stravaganza v1.5.0 h1:ei0onFm8tEU45LzlfTDspZft4nHS5CWL24nETQ9y6YU=
+github.com/jackal-xmpp/stravaganza v1.5.0/go.mod h1:qosF3qJLxoebR4uDb2ArBxTyAf9UaRwDvk6rPnddAe8=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -551,8 +551,8 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e h1:CsOuNlbOuf0mzxJIefr6Q4uAUetRUwZE4qt7VfzP+xo=
+golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/helm/values.yaml b/helm/values.yaml
index 364c22d4d..749f018e0 100644
--- a/helm/values.yaml
+++ b/helm/values.yaml
@@ -10,7 +10,7 @@ jackal:
image:
repository: ortuman/jackal
- tag: 0.61.0
+ tag: 0.63.0
pullPolicy: IfNotPresent
resources:
requests:
diff --git a/pkg/c2s/in.go b/pkg/c2s/in.go
index 27e7c3b52..3566851d0 100644
--- a/pkg/c2s/in.go
+++ b/pkg/c2s/in.go
@@ -31,6 +31,7 @@ import (
stanzaerror "github.com/jackal-xmpp/stravaganza/errors/stanza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
"github.com/jackal-xmpp/stravaganza/jid"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/auth"
"github.com/ortuman/jackal/pkg/cluster/instance"
"github.com/ortuman/jackal/pkg/cluster/resourcemanager"
@@ -39,7 +40,6 @@ import (
"github.com/ortuman/jackal/pkg/host"
c2smodel "github.com/ortuman/jackal/pkg/model/c2s"
"github.com/ortuman/jackal/pkg/module"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/router"
"github.com/ortuman/jackal/pkg/router/stream"
xmppsession "github.com/ortuman/jackal/pkg/session"
diff --git a/pkg/c2s/in_test.go b/pkg/c2s/in_test.go
index 56de60d13..926078a95 100644
--- a/pkg/c2s/in_test.go
+++ b/pkg/c2s/in_test.go
@@ -29,10 +29,10 @@ import (
"github.com/jackal-xmpp/stravaganza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
"github.com/jackal-xmpp/stravaganza/jid"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/auth"
"github.com/ortuman/jackal/pkg/hook"
c2smodel "github.com/ortuman/jackal/pkg/model/c2s"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/router"
"github.com/ortuman/jackal/pkg/router/stream"
"github.com/ortuman/jackal/pkg/transport"
diff --git a/pkg/component/xep0114/in.go b/pkg/component/xep0114/in.go
index b166a3629..47b0f386d 100644
--- a/pkg/component/xep0114/in.go
+++ b/pkg/component/xep0114/in.go
@@ -31,11 +31,11 @@ import (
"github.com/jackal-xmpp/stravaganza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
"github.com/jackal-xmpp/stravaganza/jid"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/component"
"github.com/ortuman/jackal/pkg/component/extcomponentmanager"
"github.com/ortuman/jackal/pkg/hook"
"github.com/ortuman/jackal/pkg/host"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/router"
xmppsession "github.com/ortuman/jackal/pkg/session"
"github.com/ortuman/jackal/pkg/shaper"
diff --git a/pkg/component/xep0114/in_test.go b/pkg/component/xep0114/in_test.go
index 4d6bd69be..81103cbf6 100644
--- a/pkg/component/xep0114/in_test.go
+++ b/pkg/component/xep0114/in_test.go
@@ -27,9 +27,9 @@ import (
"github.com/jackal-xmpp/runqueue/v2"
"github.com/jackal-xmpp/stravaganza"
"github.com/jackal-xmpp/stravaganza/jid"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/component"
"github.com/ortuman/jackal/pkg/hook"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/transport"
"github.com/stretchr/testify/require"
"golang.org/x/time/rate"
diff --git a/pkg/module/xep0198/stream.go b/pkg/module/xep0198/stream.go
index c6f991df6..253c3104d 100644
--- a/pkg/module/xep0198/stream.go
+++ b/pkg/module/xep0198/stream.go
@@ -30,13 +30,13 @@ import (
"github.com/jackal-xmpp/stravaganza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
"github.com/jackal-xmpp/stravaganza/jid"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
clusterconnmanager "github.com/ortuman/jackal/pkg/cluster/connmanager"
"github.com/ortuman/jackal/pkg/cluster/instance"
"github.com/ortuman/jackal/pkg/cluster/resourcemanager"
"github.com/ortuman/jackal/pkg/hook"
"github.com/ortuman/jackal/pkg/host"
streamqueue "github.com/ortuman/jackal/pkg/module/xep0198/queue"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/router"
"github.com/ortuman/jackal/pkg/router/stream"
)
diff --git a/pkg/parser/parser.go b/pkg/parser/parser.go
deleted file mode 100644
index e61ac86f6..000000000
--- a/pkg/parser/parser.go
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2022 The jackal Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package xmppparser
-
-import (
- "encoding/xml"
- "errors"
- "fmt"
- "io"
-
- "github.com/jackal-xmpp/stravaganza"
-)
-
-const rootElementIndex = -1
-
-const (
- streamName = "stream"
-)
-
-// ParsingMode defines the way in which special parsed element
-// should be considered or not according to the reader nature.
-type ParsingMode int
-
-const (
- // DefaultMode treats incoming elements as provided from raw byte reader.
- DefaultMode = ParsingMode(iota)
-
- // SocketStream treats incoming elements as provided from a socket transport.
- SocketStream
-)
-
-// ErrTooLargeStanza will be returned Parse when the size of the incoming stanza is too large.
-var ErrTooLargeStanza = errors.New("parser: too large stanza")
-
-// ErrStreamClosedByPeer will be returned by Parse when stream closed element is parsed.
-var ErrStreamClosedByPeer = errors.New("parser: stream closed by peer")
-
-// Parser parses arbitrary XML input and builds an array with the structure of all tag and data elements.
-type Parser struct {
- dec *xml.Decoder
- mode ParsingMode
- nextElement stravaganza.Element
- stack []*stravaganza.Builder
- pIndex int
- inElement bool
- lastOffset int64
- maxStanzaSize int64
-}
-
-// New creates an empty Parser instance.
-func New(reader io.Reader, mode ParsingMode, maxStanzaSize int) *Parser {
- return &Parser{
- mode: mode,
- dec: xml.NewDecoder(reader),
- pIndex: rootElementIndex,
- maxStanzaSize: int64(maxStanzaSize),
- }
-}
-
-// Parse parses next available XML element from reader.
-func (p *Parser) Parse() (stravaganza.Element, error) {
- t, err := p.dec.RawToken()
- if err != nil {
- return nil, err
- }
- for {
- // check max stanza size limit
- off := p.dec.InputOffset()
- if p.maxStanzaSize > 0 && off-p.lastOffset > p.maxStanzaSize {
- return nil, ErrTooLargeStanza
- }
- switch t1 := t.(type) {
- case xml.StartElement:
- p.startElement(t1)
- if p.mode == SocketStream && t1.Name.Local == streamName && t1.Name.Space == streamName {
- if err := p.closeElement(xmlName(t1.Name.Space, t1.Name.Local)); err != nil {
- return nil, err
- }
- goto done
- }
-
- case xml.CharData:
- if p.inElement {
- p.setElementText(t1)
- }
-
- case xml.EndElement:
- if p.mode == SocketStream && t1.Name.Local == streamName && t1.Name.Space == streamName {
- return nil, ErrStreamClosedByPeer
- }
- if err := p.endElement(t1); err != nil {
- return nil, err
- }
- if p.pIndex == rootElementIndex {
- goto done
- }
- }
- t, err = p.dec.RawToken()
- if err != nil {
- return nil, err
- }
- }
-
-done:
- p.lastOffset = p.dec.InputOffset()
- elem := p.nextElement
- p.nextElement = nil
-
- return elem, nil
-}
-
-func (p *Parser) startElement(t xml.StartElement) {
- name := xmlName(t.Name.Space, t.Name.Local)
-
- attrs := make([]stravaganza.Attribute, 0, len(t.Attr))
- for _, a := range t.Attr {
- name := xmlName(a.Name.Space, a.Name.Local)
- attrs = append(attrs, stravaganza.Attribute{Label: name, Value: a.Value})
- }
- builder := stravaganza.NewBuilder(name).WithAttributes(attrs...)
- p.stack = append(p.stack, builder)
-
- p.pIndex = len(p.stack) - 1
- p.inElement = true
-}
-
-func (p *Parser) setElementText(t xml.CharData) {
- p.stack[p.pIndex] = p.stack[p.pIndex].WithText(string(t))
-}
-
-func (p *Parser) endElement(t xml.EndElement) error {
- return p.closeElement(xmlName(t.Name.Space, t.Name.Local))
-}
-
-func (p *Parser) closeElement(name string) error {
- if p.pIndex == rootElementIndex {
- return errUnexpectedEnd(name)
- }
- builder := p.stack[p.pIndex]
- p.stack = p.stack[:p.pIndex]
-
- element := builder.Build()
-
- if name != element.Name() {
- return errUnexpectedEnd(name)
- }
- p.pIndex = len(p.stack) - 1
- if p.pIndex == rootElementIndex {
- p.nextElement = element
- } else {
- p.stack[p.pIndex] = p.stack[p.pIndex].WithChild(element)
- }
- p.inElement = false
- return nil
-}
-
-func xmlName(space, local string) string {
- if len(space) > 0 {
- return fmt.Sprintf("%s:%s", space, local)
- }
- return local
-}
-
-func errUnexpectedEnd(name string) error {
- return fmt.Errorf("xmppparser: unexpected end element %s>", name)
-}
diff --git a/pkg/parser/parser_test.go b/pkg/parser/parser_test.go
deleted file mode 100644
index ede67ff2d..000000000
--- a/pkg/parser/parser_test.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2022 The jackal Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package xmppparser
-
-import (
- "strings"
- "testing"
-
- "github.com/stretchr/testify/require"
-)
-
-func TestParser_ErrTooLargeStanzaRead(t *testing.T) {
- // given
- docSrc := ``
- p := New(strings.NewReader(docSrc), SocketStream, 4)
-
- // when
- a, err0 := p.Parse()
- be, err1 := p.Parse()
-
- // then
- require.Nil(t, err0)
- require.NotNil(t, a)
- require.Equal(t, "", a.String())
-
- require.Nil(t, be)
- require.Equal(t, ErrTooLargeStanza, err1)
-}
-
-func TestParser_ParseSeveralElements(t *testing.T) {
- // given
- docSrc := ``
-
- r := strings.NewReader(docSrc)
- p := New(r, DefaultMode, 1024)
-
- // when
- a, err1 := p.Parse()
- b, err2 := p.Parse()
- c, err3 := p.Parse()
-
- // then
- require.NotNil(t, a)
- require.Nil(t, err1)
-
- require.NotNil(t, b)
- require.Nil(t, err2)
-
- require.NotNil(t, c)
- require.Nil(t, err3)
-}
-
-func TestParser_DocChildElements(t *testing.T) {
- // given
- docSrc := `\n`
- p := New(strings.NewReader(docSrc), DefaultMode, 1024)
-
- // when
- elem, err := p.Parse()
- require.Nil(t, err)
- require.NotNil(t, elem)
-
- childs := elem.AllChildren()
-
- // then
- require.Equal(t, 3, len(childs))
- require.Equal(t, "a", childs[0].Name())
- require.Equal(t, "b", childs[1].Name())
- require.Equal(t, "c", childs[2].Name())
-}
-
-func TestParser_Stream(t *testing.T) {
- openStreamXML := ` `
- p := New(strings.NewReader(openStreamXML), SocketStream, 1024)
- elem, err := p.Parse()
- require.Nil(t, err)
- require.Equal(t, "stream:stream", elem.Name())
-
- closeStreamXML := ` `
- p = New(strings.NewReader(closeStreamXML), SocketStream, 1024)
-
- _, err = p.Parse()
-
- require.Equal(t, ErrStreamClosedByPeer, err)
-}
diff --git a/pkg/s2s/in.go b/pkg/s2s/in.go
index 7e35aea13..d5b2e7263 100644
--- a/pkg/s2s/in.go
+++ b/pkg/s2s/in.go
@@ -31,12 +31,12 @@ import (
stanzaerror "github.com/jackal-xmpp/stravaganza/errors/stanza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
"github.com/jackal-xmpp/stravaganza/jid"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/cluster/kv"
"github.com/ortuman/jackal/pkg/component"
"github.com/ortuman/jackal/pkg/hook"
"github.com/ortuman/jackal/pkg/host"
"github.com/ortuman/jackal/pkg/module"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/router"
"github.com/ortuman/jackal/pkg/router/stream"
xmppsession "github.com/ortuman/jackal/pkg/session"
diff --git a/pkg/s2s/in_test.go b/pkg/s2s/in_test.go
index 97ac2431f..f189c1c9d 100644
--- a/pkg/s2s/in_test.go
+++ b/pkg/s2s/in_test.go
@@ -30,8 +30,8 @@ import (
"github.com/jackal-xmpp/stravaganza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
"github.com/jackal-xmpp/stravaganza/jid"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/hook"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/router"
"github.com/ortuman/jackal/pkg/router/stream"
"github.com/ortuman/jackal/pkg/transport"
diff --git a/pkg/s2s/out.go b/pkg/s2s/out.go
index e0fa2cb8c..0d5f6e81a 100644
--- a/pkg/s2s/out.go
+++ b/pkg/s2s/out.go
@@ -31,10 +31,10 @@ import (
"github.com/jackal-xmpp/stravaganza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
"github.com/jackal-xmpp/stravaganza/jid"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/cluster/kv"
"github.com/ortuman/jackal/pkg/hook"
"github.com/ortuman/jackal/pkg/host"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/router/stream"
xmppsession "github.com/ortuman/jackal/pkg/session"
"github.com/ortuman/jackal/pkg/shaper"
diff --git a/pkg/s2s/out_test.go b/pkg/s2s/out_test.go
index 08ee07e60..651b4e640 100644
--- a/pkg/s2s/out_test.go
+++ b/pkg/s2s/out_test.go
@@ -29,8 +29,8 @@ import (
"github.com/jackal-xmpp/runqueue/v2"
"github.com/jackal-xmpp/stravaganza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/hook"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/router/stream"
"github.com/ortuman/jackal/pkg/transport"
"github.com/stretchr/testify/require"
diff --git a/pkg/session/session.go b/pkg/session/session.go
index 42c7066bc..046dae12e 100644
--- a/pkg/session/session.go
+++ b/pkg/session/session.go
@@ -32,8 +32,8 @@ import (
stanzaerror "github.com/jackal-xmpp/stravaganza/errors/stanza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
"github.com/jackal-xmpp/stravaganza/jid"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/host"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
"github.com/ortuman/jackal/pkg/transport"
"github.com/ortuman/jackal/pkg/util/ratelimiter"
)
diff --git a/pkg/session/session_test.go b/pkg/session/session_test.go
index 725ab2de3..e2df250a6 100644
--- a/pkg/session/session_test.go
+++ b/pkg/session/session_test.go
@@ -25,7 +25,7 @@ import (
stanzaerror "github.com/jackal-xmpp/stravaganza/errors/stanza"
streamerror "github.com/jackal-xmpp/stravaganza/errors/stream"
"github.com/jackal-xmpp/stravaganza/jid"
- xmppparser "github.com/ortuman/jackal/pkg/parser"
+ xmppparser "github.com/jackal-xmpp/stravaganza/parser"
"github.com/ortuman/jackal/pkg/transport"
"github.com/ortuman/jackal/pkg/util/ratelimiter"
"github.com/stretchr/testify/require"
diff --git a/pkg/version/version.go b/pkg/version/version.go
index 5c51f5f85..e92ac5a4b 100644
--- a/pkg/version/version.go
+++ b/pkg/version/version.go
@@ -19,7 +19,7 @@ import (
)
// Version represents application version.
-var Version = NewVersion(0, 62, 3)
+var Version = NewVersion(0, 63, 0)
// APIVersion represents admin API version.
var APIVersion = NewVersion(1, 0, 0)