├── src ├── media │ └── net-logo-white.xcf ├── site │ ├── resources │ │ ├── images │ │ │ └── net-logo-white.png │ │ └── download_net.cgi │ ├── custom │ │ └── project-info-report.properties │ ├── xdoc │ │ ├── faq.xml │ │ └── tasks.xml │ └── site.xml ├── test │ ├── resources │ │ └── org │ │ │ └── apache │ │ │ └── commons │ │ │ └── net │ │ │ ├── ftpsserver │ │ │ ├── ftpserver.jks │ │ │ └── users.properties │ │ │ ├── test.properties │ │ │ └── test-data │ │ │ └── file.txt │ └── java │ │ └── org │ │ └── apache │ │ └── commons │ │ └── net │ │ ├── ftp │ │ ├── FTPCommandTest.java │ │ ├── GZIPSocket.java │ │ ├── TestConnectTimeout.java │ │ └── NoProtocolSslConfigurationProxy.java │ │ ├── tftp │ │ ├── TFTPPacketExceptionTest.java │ │ ├── TFTPReadRequestPacketTest.java │ │ ├── TFTPWriteRequestPacketTest.java │ │ ├── TFTPAckPacketTest.java │ │ ├── TFTPErrorPacketTest.java │ │ └── TFTPDataPacketTest.java │ │ ├── whois │ │ └── WhoisClientTest.java │ │ ├── echo │ │ ├── EchoTCPClientTest.java │ │ └── EchoUDPClientTest.java │ │ ├── util │ │ ├── CharsetsTest.java │ │ ├── TrustManagerUtilsTest.java │ │ └── ListenerListTest.java │ │ ├── telnet │ │ ├── InvalidTelnetOptionExceptionTest.java │ │ ├── TelnetOptionTest.java │ │ ├── EchoOptionHandlerTest.java │ │ ├── SuppressGAOptionHandlerTest.java │ │ └── SimpleOptionHandlerTest.java │ │ ├── chargen │ │ ├── CharGenTCPClientTest.java │ │ └── CharGenUDPClientTest.java │ │ ├── discard │ │ ├── DiscardTCPClientTest.java │ │ └── DiscardUDPClientTest.java │ │ ├── bsd │ │ ├── RLoginClientTest.java │ │ ├── RCommandClientTest.java │ │ └── RExecClientTest.java │ │ ├── pop3 │ │ └── POP3Constants.java │ │ ├── daytime │ │ └── DaytimeUDPClientTest.java │ │ ├── imap │ │ └── AuthenticatingIMAPClientTest.java │ │ ├── SocketClientFunctionalTest.java │ │ ├── time │ │ └── TimeUDPClientTest.java │ │ └── nntp │ │ └── TestThreader.java ├── main │ └── java │ │ └── org │ │ └── apache │ │ └── commons │ │ └── net │ │ ├── util │ │ ├── package-info.java │ │ ├── SSLSocketUtils.java │ │ ├── NetConstants.java │ │ └── Charsets.java │ │ ├── whois │ │ └── package-info.java │ │ ├── pop3 │ │ ├── package-info.java │ │ └── POP3Reply.java │ │ ├── smtp │ │ ├── package-info.java │ │ └── SMTPConnectionClosedException.java │ │ ├── echo │ │ ├── package-info.java │ │ └── EchoTCPClient.java │ │ ├── finger │ │ └── package-info.java │ │ ├── ntp │ │ └── package-info.java │ │ ├── telnet │ │ ├── package-info.java │ │ ├── TelnetInputListener.java │ │ ├── InvalidTelnetOptionException.java │ │ ├── EchoOptionHandler.java │ │ ├── SuppressGAOptionHandler.java │ │ ├── SimpleOptionHandler.java │ │ └── TelnetNotificationHandler.java │ │ ├── chargen │ │ └── package-info.java │ │ ├── daytime │ │ ├── package-info.java │ │ └── DaytimeTCPClient.java │ │ ├── discard │ │ ├── package-info.java │ │ └── DiscardTCPClient.java │ │ ├── ftp │ │ ├── package-info.java │ │ ├── parser │ │ │ ├── package-info.java │ │ │ ├── FTPTimestampParser.java │ │ │ ├── ParserInitializationException.java │ │ │ ├── CompositeFileEntryParser.java │ │ │ └── FTPFileEntryParserFactory.java │ │ ├── FTPFileFilter.java │ │ ├── Configurable.java │ │ ├── DurationUtils.java │ │ ├── FTPFileFilters.java │ │ ├── DeflateSocket.java │ │ ├── FTPConnectionClosedException.java │ │ ├── FTPSTrustManager.java │ │ ├── FTPFileEntryParserImpl.java │ │ └── FTPSCommand.java │ │ ├── io │ │ ├── package-info.java │ │ ├── SocketInputStream.java │ │ └── CRLFLineReader.java │ │ ├── tftp │ │ ├── package-info.java │ │ └── TFTPPacketException.java │ │ ├── bsd │ │ └── package-info.java │ │ ├── imap │ │ └── package-info.java │ │ ├── nntp │ │ ├── package-info.java │ │ ├── ArticleInfo.java │ │ ├── ArticlePointer.java │ │ ├── NewsgroupIterator.java │ │ ├── NNTPConnectionClosedException.java │ │ ├── ArticleIterator.java │ │ └── Threadable.java │ │ ├── time │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── examples │ │ ├── package-info.java │ │ ├── PrintCommandListeners.java │ │ ├── nntp │ │ │ └── NNTPUtils.java │ │ ├── telnet │ │ │ └── WeatherTelnet.java │ │ ├── unix │ │ │ └── fwhois.java │ │ └── mail │ │ │ └── IMAPMail.java │ │ ├── MalformedServerReplyException.java │ │ ├── ProtocolCommandListener.java │ │ └── DatagramSocketFactory.java ├── conf │ └── checkstyle-suppressions.xml └── assembly │ └── src.xml ├── NOTICE.txt ├── .gitignore ├── BUILDING.txt ├── .gitattributes ├── SECURITY.md ├── CODE_OF_CONDUCT.md ├── .github ├── GH-ROBOTS.txt ├── dependabot.yml ├── workflows │ ├── dependency-review.yml │ └── scorecards-analysis.yml └── pull_request_template.md └── .asf.yaml /src/media/net-logo-white.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/commons-net/HEAD/src/media/net-logo-white.xcf -------------------------------------------------------------------------------- /src/site/resources/images/net-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/commons-net/HEAD/src/site/resources/images/net-logo-white.png -------------------------------------------------------------------------------- /src/test/resources/org/apache/commons/net/ftpsserver/ftpserver.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/commons-net/HEAD/src/test/resources/org/apache/commons/net/ftpsserver/ftpserver.jks -------------------------------------------------------------------------------- /NOTICE.txt: -------------------------------------------------------------------------------- 1 | Apache Commons Net 2 | Copyright 2001-2025 The Apache Software Foundation 3 | 4 | This product includes software developed at 5 | The Apache Software Foundation (https://www.apache.org/). 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.classpath 2 | /.project 3 | /.settings/ 4 | /target/ 5 | /.vscode/ 6 | .idea/ 7 | *.iml 8 | /site-content/ 9 | 10 | # NetBeans files 11 | nb-configuration.xml 12 | nbactions.xml 13 | -------------------------------------------------------------------------------- /src/site/resources/download_net.cgi: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Just call the standard mirrors.cgi script. It will use download.html 3 | # as the input template. 4 | exec /www/www.apache.org/dyn/mirrors/mirrors.cgi $* -------------------------------------------------------------------------------- /BUILDING.txt: -------------------------------------------------------------------------------- 1 | The code requires at least Java 8 to build. 2 | 3 | For setting up your Maven installation to enable the use of the profile, please see: 4 | 5 | https://commons.apache.org/commons-parent-pom.html#Testing_with_different_Java_versions 6 | 7 | Building the site will also generally require at least Java 8 to run Maven. 8 | 9 | To build the site from scratch, you can use: 10 | 11 | $ mvn clean site 12 | 13 | To install the component locally: 14 | 15 | $ mvn install 16 | 17 | To deploy: 18 | 19 | $ mvn deploy -Prelease -Duser.name=*ASF ID* [-Ptest-deploy] 20 | 21 | The test-deploy profile deploys to target/deploy rather than Nexus 22 | 23 | [1] http://maven.apache.org/docs/history.html 24 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/commons/net/test.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # https://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | a=1 17 | b=2 18 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # https://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | * text=auto 17 | *.patch -text 18 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 17 | The Apache Commons security page is [https://commons.apache.org/security.html](https://commons.apache.org/security.html). 18 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/util/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Utility classes 20 | */ 21 | package org.apache.commons.net.util; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/whois/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Whois client 20 | */ 21 | package org.apache.commons.net.whois; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/pop3/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * POP3 and POP3S mail 20 | */ 21 | package org.apache.commons.net.pop3; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/smtp/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * SMTP and SMTPS mail 20 | */ 21 | package org.apache.commons.net.smtp; -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 17 | The Apache code of conduct page is [https://www.apache.org/foundation/policies/conduct.html](https://www.apache.org/foundation/policies/conduct.html). 18 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/echo/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Echo over TCP and UDP 20 | */ 21 | package org.apache.commons.net.echo; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/finger/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Finger implementation 20 | */ 21 | package org.apache.commons.net.finger; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ntp/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * NTP - network time protocol 20 | */ 21 | package org.apache.commons.net.ntp; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/telnet/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Telnet implementation 20 | */ 21 | package org.apache.commons.net.telnet; -------------------------------------------------------------------------------- /.github/GH-ROBOTS.txt: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # https://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | # Keeps on creating FUD PRs in test code 17 | # Does not follow Apache disclosure policies 18 | User-agent: JLLeitschuh/security-research 19 | Disallow: * 20 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/chargen/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Chargen over TCP and UDP 20 | */ 21 | package org.apache.commons.net.chargen; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/daytime/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Daytime over TCP and UDP 20 | */ 21 | package org.apache.commons.net.daytime; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/discard/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Discard over TCP and UDP 20 | */ 21 | package org.apache.commons.net.discard; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * FTP and FTPS support classes 20 | */ 21 | package org.apache.commons.net.ftp; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/io/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Utility classes for IO support. 20 | */ 21 | package org.apache.commons.net.io; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/tftp/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * TFTP cliemt implementation 20 | */ 21 | package org.apache.commons.net.tftp; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/bsd/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Classes for rcommand, rexec, rlogin 20 | */ 21 | package org.apache.commons.net.bsd; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/imap/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Basic IMAP and IMAPS support classes 20 | */ 21 | package org.apache.commons.net.imap; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/nntp/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * NNTP - network news transfer protocol 20 | */ 21 | package org.apache.commons.net.nntp; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/time/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Time protocol (RFC 868) over TCP and UDP 20 | */ 21 | package org.apache.commons.net.time; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/parser/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * FTP file listing parser classes 20 | */ 21 | package org.apache.commons.net.ftp.parser; -------------------------------------------------------------------------------- /src/test/resources/org/apache/commons/net/test-data/file.txt: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # https://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | “We are all in the gutter, but some of us are looking at the stars.” 19 | 20 | ― Oscar Wilde, Lady Windermere's Fan 21 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Common socket classes and protocol command utility classes 20 | */ 21 | package org.apache.commons.net; -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/examples/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Example classes. 20 | *

21 | * These do not form part of the public API and may change without notice. 22 | */ 23 | package org.apache.commons.net.examples; -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # https://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | version: 2 17 | updates: 18 | - package-ecosystem: "maven" 19 | directory: "/" 20 | schedule: 21 | interval: "quarterly" 22 | ignore: 23 | - dependency-name: "org.slf4j:slf4j-simple" 24 | - package-ecosystem: "github-actions" 25 | directory: "/" 26 | schedule: 27 | interval: "quarterly" 28 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/ftp/FTPCommandTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | import org.junit.jupiter.api.Test; 21 | 22 | public class FTPCommandTest { 23 | 24 | @SuppressWarnings("deprecation") // test of deprecated code 25 | @Test 26 | public void testArray() { 27 | FTPCommand.checkArray(); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/conf/checkstyle-suppressions.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /.github/workflows/dependency-review.yml: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # https://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | name: 'Dependency Review' 19 | on: [pull_request] 20 | 21 | permissions: 22 | contents: read 23 | 24 | jobs: 25 | dependency-review: 26 | runs-on: ubuntu-latest 27 | steps: 28 | - name: 'Checkout Repository' 29 | uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 30 | - name: 'Dependency Review PR' 31 | uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2 32 | -------------------------------------------------------------------------------- /src/site/custom/project-info-report.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # https://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | # Replace SCM report description in index page 19 | report.scm.description=This document lists ways to access the online source repository. 20 | 21 | # Replace SCM report text for viewvc section 22 | report.scm.webaccess.title=Browser (HTTP) Access 23 | report.scm.webaccess.url=The following is a link to a browsable version of the source repository. \ 24 | Please use the "Anonymous Access" or "Developer Access" URL if you want to check out the source using your SCM client. -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/FTPFileFilter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | /** 21 | * Performs filtering on {@link FTPFile} instances. 22 | * 23 | * @since 2.2 24 | */ 25 | public interface FTPFileFilter { 26 | 27 | /** 28 | * Checks if an FTPFile entry should be included or not. 29 | * 30 | * @param file entry to be checked for inclusion. May be {@code null}. 31 | * @return {@code true} if the file is to be included, {@code false} otherwise. 32 | */ 33 | boolean accept(FTPFile file); 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/telnet/TelnetInputListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.telnet; 19 | 20 | /** 21 | * Listener interface used for notification that incoming data is available to be read. 22 | * 23 | * @see TelnetClient 24 | * @since 3.0 25 | */ 26 | public interface TelnetInputListener { 27 | 28 | /** 29 | * Callback method invoked when new incoming data is available on a {@link TelnetClient}'s {@link TelnetClient#getInputStream input stream}. 30 | * 31 | * @see TelnetClient#registerInputListener 32 | */ 33 | void telnetInputAvailable(); 34 | } 35 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/tftp/TFTPPacketExceptionTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.tftp; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertEquals; 21 | import static org.junit.jupiter.api.Assertions.assertNull; 22 | 23 | import org.junit.jupiter.api.Test; 24 | 25 | /** 26 | * Tests {@link TFTPPacketException}. 27 | */ 28 | public class TFTPPacketExceptionTest { 29 | 30 | @Test 31 | public void testContructor() { 32 | assertNull(new TFTPPacketException().getMessage()); 33 | assertEquals("A", new TFTPPacketException("A").getMessage()); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/nntp/ArticleInfo.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.nntp; 19 | 20 | /** 21 | * Class contains details about an article. Create an instance of the class and pass it to the appropriate NNTP method. The values will be populated on return. 22 | */ 23 | public class ArticleInfo { 24 | 25 | /** 26 | * Article ID. 27 | */ 28 | public String articleId; 29 | 30 | /** 31 | * Article number. 32 | */ 33 | public long articleNumber; 34 | 35 | /** 36 | * Constructs a new instance. 37 | */ 38 | public ArticleInfo() { 39 | // empty 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/tftp/TFTPReadRequestPacketTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.tftp; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertNotNull; 21 | 22 | import java.net.InetAddress; 23 | import java.net.UnknownHostException; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link TFTPReadRequestPacket}. 29 | */ 30 | public class TFTPReadRequestPacketTest { 31 | 32 | @Test 33 | public void testToString() throws UnknownHostException { 34 | assertNotNull(new TFTPReadRequestPacket(InetAddress.getLocalHost(), 0, "", 0).toString()); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/tftp/TFTPWriteRequestPacketTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.tftp; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertNotNull; 21 | 22 | import java.net.InetAddress; 23 | import java.net.UnknownHostException; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link TFTPReadRequestPacket}. 29 | */ 30 | public class TFTPWriteRequestPacketTest { 31 | 32 | @Test 33 | public void testToString() throws UnknownHostException { 34 | assertNotNull(new TFTPReadRequestPacket(InetAddress.getLocalHost(), 0, "", 0).toString()); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /.asf.yaml: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # https://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | github: 17 | description: "Apache Commons Net" 18 | homepage: https://commons.apache.org/net/ 19 | 20 | notifications: 21 | commits: commits@commons.apache.org 22 | issues: issues@commons.apache.org 23 | pullrequests: issues@commons.apache.org 24 | jira_options: link label 25 | jobs: notifications@commons.apache.org 26 | # commits_bot_dependabot: dependabot@commons.apache.org 27 | issues_bot_dependabot: dependabot@commons.apache.org 28 | pullrequests_bot_dependabot: dependabot@commons.apache.org 29 | issues_bot_codecov-commenter: notifications@commons.apache.org 30 | pullrequests_bot_codecov-commenter: notifications@commons.apache.org 31 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/Configurable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | /** 21 | * This interface adds the aspect of configurability by means of a supplied FTPClientConfig object to other classes in the system, especially listing parsers. 22 | */ 23 | public interface Configurable { 24 | 25 | /** 26 | * Configures this instance using an FTPClientConfig. 27 | * 28 | * @param config the object containing the configuration data. 29 | * @throws IllegalArgumentException if the elements of the {@code config} are somehow inadequate to configure the Configurable object. 30 | */ 31 | void configure(FTPClientConfig config); 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/pop3/POP3Reply.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.pop3; 19 | 20 | /** 21 | * POP3Reply stores POP3 reply code constants. 22 | */ 23 | 24 | public final class POP3Reply { 25 | /** The reply code indicating success of an operation. */ 26 | public static final int OK = 0; 27 | 28 | /** The reply code indicating failure of an operation. */ 29 | public static final int ERROR = 1; 30 | 31 | /** 32 | * The reply code indicating intermediate response to a command. 33 | * 34 | * @since 3.0 35 | */ 36 | public static final int OK_INT = 2; 37 | 38 | /** Cannot be instantiated. */ 39 | private POP3Reply() { 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/tftp/TFTPAckPacketTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.tftp; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertNotNull; 21 | 22 | import java.net.InetAddress; 23 | import java.net.UnknownHostException; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link TFTPAckPacket}. 29 | */ 30 | public class TFTPAckPacketTest { 31 | 32 | @Test 33 | public void testNewDatagram() throws UnknownHostException { 34 | assertNotNull(new TFTPAckPacket(InetAddress.getLocalHost(), 0, 0).newDatagram()); 35 | } 36 | 37 | @Test 38 | public void testToString() throws UnknownHostException { 39 | assertNotNull(new TFTPAckPacket(InetAddress.getLocalHost(), 0, 0).toString()); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/tftp/TFTPErrorPacketTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.tftp; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertNotNull; 21 | 22 | import java.net.InetAddress; 23 | import java.net.UnknownHostException; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link TFTPErrorPacket}. 29 | */ 30 | public class TFTPErrorPacketTest { 31 | 32 | @Test 33 | public void testNewDatagram() throws UnknownHostException { 34 | assertNotNull(new TFTPErrorPacket(InetAddress.getLocalHost(), 0, 0, "").newDatagram()); 35 | } 36 | 37 | @Test 38 | public void testToString() throws UnknownHostException { 39 | assertNotNull(new TFTPErrorPacket(InetAddress.getLocalHost(), 0, 0, "").toString()); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/tftp/TFTPDataPacketTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.tftp; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertNotNull; 21 | 22 | import java.net.InetAddress; 23 | import java.net.UnknownHostException; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link TFTPDataPacket}. 29 | */ 30 | public class TFTPDataPacketTest { 31 | 32 | @Test 33 | public void testNewDatagram() throws UnknownHostException { 34 | assertNotNull(new TFTPDataPacket(InetAddress.getLocalHost(), 0, 0, new byte[0]).newDatagram()); 35 | } 36 | 37 | @Test 38 | public void testToString() throws UnknownHostException { 39 | assertNotNull(new TFTPDataPacket(InetAddress.getLocalHost(), 0, 0, new byte[0]).toString()); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/whois/WhoisClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.whois; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertEquals; 22 | 23 | import java.io.IOException; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link WhoisClient}. 29 | */ 30 | public class WhoisClientTest { 31 | 32 | @Test 33 | public void testConstructor() { 34 | assertDoesNotThrow(WhoisClient::new); 35 | } 36 | 37 | @Test 38 | public void testDefaultPort() { 39 | assertEquals(WhoisClient.DEFAULT_PORT, new WhoisClient().getDefaultPort()); 40 | } 41 | 42 | @Test 43 | public void testDisconnect() throws IOException { 44 | new WhoisClient().disconnect(); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/echo/EchoTCPClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.echo; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertNull; 21 | import static org.junit.jupiter.api.Assertions.assertEquals; 22 | 23 | import java.io.IOException; 24 | import java.io.InputStream; 25 | 26 | import org.junit.jupiter.api.Test; 27 | 28 | /** 29 | * Tests {@link EchoTCPClient}. 30 | */ 31 | public class EchoTCPClientTest { 32 | 33 | @Test 34 | public void testDefaultPort() { 35 | assertEquals(EchoTCPClient.DEFAULT_PORT, new EchoTCPClient().getDefaultPort()); 36 | } 37 | 38 | @Test 39 | public void testDetInputStream() throws IOException { 40 | try (InputStream inputStream = new EchoTCPClient().getInputStream()) { 41 | assertNull(inputStream); 42 | } 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/examples/PrintCommandListeners.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.examples; 19 | 20 | import org.apache.commons.net.PrintCommandListener; 21 | import org.apache.commons.net.io.Util; 22 | 23 | /** 24 | * Factory of {@link PrintCommandListener} for examples. 25 | */ 26 | public class PrintCommandListeners { 27 | 28 | /** 29 | * Creates a new PrintCommandListener on system out. 30 | * 31 | * @return a new PrintCommandListener on system out. 32 | */ 33 | public static PrintCommandListener sysOutPrintCommandListener() { 34 | return new PrintCommandListener(Util.newPrintWriter(System.out), true); 35 | } 36 | 37 | /** 38 | * Constructs a new instance. 39 | * 40 | * @deprecated Will be private in the next major release. 41 | */ 42 | @Deprecated 43 | public PrintCommandListeners() { 44 | // empty 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/util/CharsetsTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.util; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertEquals; 22 | 23 | import java.nio.charset.StandardCharsets; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link Charsets}. 29 | */ 30 | public class CharsetsTest { 31 | 32 | @Test 33 | public void testToCharset() { 34 | assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(StandardCharsets.UTF_8.name())); 35 | } 36 | 37 | @Test 38 | public void testToCharsetDefault() { 39 | assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(null, StandardCharsets.UTF_8.name())); 40 | } 41 | 42 | @SuppressWarnings("deprecation") 43 | @Test 44 | public void testToConstructor() { 45 | assertDoesNotThrow(Charsets::new); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/util/SSLSocketUtils.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.util; 19 | 20 | import javax.net.ssl.SSLParameters; 21 | import javax.net.ssl.SSLSocket; 22 | 23 | /** 24 | * General utilities for SSLSocket. 25 | * 26 | * @since 3.4 27 | */ 28 | public class SSLSocketUtils { 29 | 30 | /** 31 | * Enable the HTTPS endpoint identification algorithm on an SSLSocket. 32 | * 33 | * @param socket the SSL socket 34 | * @return Always returns {@code true} 35 | */ 36 | // TODO for 4.0: becomes a void method. 37 | public static boolean enableEndpointNameVerification(final SSLSocket socket) { 38 | final SSLParameters sslParameters = socket.getSSLParameters(); 39 | sslParameters.setEndpointIdentificationAlgorithm("HTTPS"); 40 | socket.setSSLParameters(sslParameters); 41 | return true; 42 | } 43 | 44 | private SSLSocketUtils() { 45 | // Not instantiable 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/DurationUtils.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | import java.time.Duration; 21 | 22 | /** Temporary until Commons Lang 3.12.0. */ 23 | final class DurationUtils { 24 | 25 | /** 26 | * Tests whether the given Duration is positive (>0). 27 | * 28 | * @param duration the value to test 29 | * @return whether the given Duration is positive (>0). 30 | */ 31 | static boolean isPositive(final Duration duration) { 32 | return duration != null && !duration.isNegative() && !duration.isZero(); 33 | } 34 | 35 | static int toMillisInt(final Duration duration) { 36 | final long millis = duration.toMillis(); 37 | return millis > 0 ? (int) Math.min(millis, Integer.MAX_VALUE) : (int) Math.max(millis, Integer.MIN_VALUE); 38 | } 39 | 40 | static Duration zeroIfNull(final Duration controlIdle) { 41 | return controlIdle == null ? Duration.ZERO : controlIdle; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/FTPFileFilters.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | import java.util.Objects; 21 | 22 | /** 23 | * Implements some simple FTPFileFilter classes. 24 | * 25 | * @since 2.2 26 | */ 27 | public class FTPFileFilters { 28 | 29 | /** 30 | * Accepts all FTPFile entries, including null. 31 | */ 32 | public static final FTPFileFilter ALL = file -> true; 33 | 34 | /** 35 | * Accepts all non-null FTPFile entries. 36 | */ 37 | public static final FTPFileFilter NON_NULL = Objects::nonNull; 38 | 39 | /** 40 | * Accepts all (non-null) FTPFile directory entries. 41 | */ 42 | public static final FTPFileFilter DIRECTORIES = file -> file != null && file.isDirectory(); 43 | 44 | /** 45 | * Constructs a new instance. 46 | * 47 | * @deprecated Will be private in the next major release. 48 | */ 49 | @Deprecated 50 | public FTPFileFilters() { 51 | // empty 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/telnet/InvalidTelnetOptionExceptionTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net.telnet; 18 | 19 | import static org.junit.jupiter.api.Assertions.assertTrue; 20 | 21 | import org.junit.jupiter.api.BeforeEach; 22 | import org.junit.jupiter.api.Test; 23 | 24 | /** 25 | * JUnit test class for InvalidTelnetOptionException 26 | */ 27 | public class InvalidTelnetOptionExceptionTest { 28 | private InvalidTelnetOptionException exc1; 29 | private String msg1; 30 | private int code1; 31 | 32 | /** 33 | * setUp for the test. 34 | */ 35 | @BeforeEach 36 | protected void setUp() { 37 | msg1 = "MSG"; 38 | code1 = 13; 39 | exc1 = new InvalidTelnetOptionException(msg1, code1); 40 | } 41 | 42 | /** 43 | * test of the constructors. 44 | */ 45 | @Test 46 | public void testConstructors() { 47 | assertTrue(exc1.getMessage().contains(msg1)); 48 | assertTrue(exc1.getMessage().contains("" + code1)); 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/nntp/ArticlePointer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.nntp; 19 | 20 | /** 21 | * This class is a structure used to return article number and unique id information extracted from an NNTP server reply. You will normally want this 22 | * information when issuing a STAT command, implemented by {@link NNTPClient#selectArticle selectArticle}. 23 | * 24 | * @see NNTPClient 25 | * @deprecated 3.0 use {@link ArticleInfo} instead 26 | */ 27 | @Deprecated 28 | public final class ArticlePointer { 29 | /** The number of the referenced article. */ 30 | public int articleNumber; 31 | /** 32 | * The unique id of the referenced article, including the enclosing < and > symbols which are technically not part of the identifier, but are required 33 | * by all NNTP commands taking an article id as an argument. 34 | */ 35 | public String articleId; 36 | 37 | /** 38 | * Constructs a new instance. 39 | */ 40 | public ArticlePointer() { 41 | // empty 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/assembly/src.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 21 | src 22 | 23 | tar.gz 24 | zip 25 | 26 | ${artifactId}-${version}-src 27 | 28 | 29 | 30 | BUILDING.txt 31 | CODE_OF_CONDUCT.md 32 | CONTRIBUTING.md 33 | LICENSE.txt 34 | NOTICE.txt 35 | pom.xml 36 | README.md 37 | RELEASE-NOTES.txt 38 | SECURITY.md 39 | 40 | 41 | 42 | src 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/DeflateSocket.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | import java.io.IOException; 21 | import java.io.InputStream; 22 | import java.io.OutputStream; 23 | import java.net.Socket; 24 | import java.util.zip.DeflaterOutputStream; 25 | import java.util.zip.InflaterInputStream; 26 | 27 | /** 28 | * Wrapper class for FTP data channel sockets when compressing data in the "deflate" compression format. All methods except of {@link #getInputStream()} and 29 | * {@link #getOutputStream()} are calling the delegate methods directly. 30 | */ 31 | final class DeflateSocket extends DelegateSocket { 32 | 33 | DeflateSocket(final Socket delegate) { 34 | super(delegate); 35 | } 36 | 37 | @Override 38 | public InputStream getInputStream() throws IOException { 39 | return new InflaterInputStream(delegate.getInputStream()); 40 | } 41 | 42 | @Override 43 | public OutputStream getOutputStream() throws IOException { 44 | return new DeflaterOutputStream(delegate.getOutputStream()); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/chargen/CharGenTCPClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.chargen; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertEquals; 22 | import static org.junit.jupiter.api.Assertions.assertNull; 23 | 24 | import java.io.IOException; 25 | import java.io.InputStream; 26 | 27 | import org.junit.jupiter.api.Test; 28 | 29 | /** 30 | * Tests {@link CharGenTCPClient}. 31 | */ 32 | public class CharGenTCPClientTest { 33 | 34 | @Test 35 | public void testConstructor() { 36 | assertDoesNotThrow(CharGenTCPClient::new); 37 | } 38 | 39 | @Test 40 | public void testDefaultPort() { 41 | assertEquals(CharGenTCPClient.DEFAULT_PORT, new CharGenTCPClient().getDefaultPort()); 42 | } 43 | 44 | @Test 45 | public void testGetInputStream() throws IOException { 46 | try (InputStream inputStream = new CharGenTCPClient().getInputStream()) { 47 | assertNull(inputStream); 48 | } 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/discard/DiscardTCPClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.discard; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertEquals; 22 | import static org.junit.jupiter.api.Assertions.assertNull; 23 | 24 | import java.io.IOException; 25 | import java.io.OutputStream; 26 | 27 | import org.junit.jupiter.api.Test; 28 | 29 | /** 30 | * Tests {@link DiscardTCPClient}. 31 | */ 32 | public class DiscardTCPClientTest { 33 | 34 | @Test 35 | public void testConstructor() { 36 | assertDoesNotThrow(DiscardTCPClient::new); 37 | } 38 | 39 | @Test 40 | public void testDefaultPort() { 41 | assertEquals(DiscardTCPClient.DEFAULT_PORT, new DiscardTCPClient().getDefaultPort()); 42 | } 43 | 44 | @Test 45 | public void testGetOutputStream() throws IOException { 46 | try (OutputStream outputStream = new DiscardTCPClient().getOutputStream()) { 47 | assertNull(outputStream); 48 | } 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/ftp/GZIPSocket.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | import java.io.IOException; 21 | import java.io.InputStream; 22 | import java.io.OutputStream; 23 | import java.net.Socket; 24 | import java.util.zip.GZIPInputStream; 25 | import java.util.zip.GZIPOutputStream; 26 | 27 | /** 28 | * Experiment, not in an RFC? 29 | * 30 | * Wrapper class for FTP data channel sockets when compressing data in the GZIP compression format. All methods except of {@link #getInputStream()} and 31 | * {@link #getOutputStream()} are calling the delegate methods directly. 32 | */ 33 | final class GZIPSocket extends DelegateSocket { 34 | 35 | GZIPSocket(final Socket delegate) { 36 | super(delegate); 37 | } 38 | 39 | @Override 40 | public InputStream getInputStream() throws IOException { 41 | return new GZIPInputStream(delegate.getInputStream()); 42 | } 43 | 44 | @Override 45 | public OutputStream getOutputStream() throws IOException { 46 | return new GZIPOutputStream(delegate.getOutputStream()); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/util/NetConstants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net.util; 18 | 19 | import java.security.cert.X509Certificate; 20 | 21 | /** 22 | * Constants provided as public only for our own implementation, you can consider this private for now. 23 | * 24 | * @since 3.8.0 25 | */ 26 | public class NetConstants { 27 | 28 | /** 29 | * An empty immutable {@code String} array. 30 | */ 31 | public static final String[] EMPTY_STRING_ARRAY = {}; 32 | 33 | /** 34 | * An empty immutable {@code byte} array. 35 | */ 36 | public static final byte[] EMPTY_BTYE_ARRAY = {}; 37 | 38 | /** 39 | * An empty immutable {link X509Certificate} array. 40 | */ 41 | public static final X509Certificate[] EMPTY_X509_CERTIFICATE_ARRAY = {}; 42 | 43 | /** 44 | * The index value when the end of the stream has been reached {@code -1}. 45 | * 46 | * @since 3.9.0 47 | */ 48 | public static final int EOS = -1; 49 | 50 | /** 51 | * Prevents instantiation. 52 | */ 53 | private NetConstants() { 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/bsd/RLoginClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.bsd; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertEquals; 22 | import static org.junit.jupiter.api.Assertions.assertNull; 23 | 24 | import java.io.IOException; 25 | import java.io.InputStream; 26 | 27 | import org.junit.jupiter.api.Test; 28 | 29 | /** 30 | * Tests {@link RLoginClient}. 31 | */ 32 | public class RLoginClientTest { 33 | 34 | private RLoginClient newClient() { 35 | return new RLoginClient(); 36 | } 37 | 38 | @Test 39 | public void testConstructor() { 40 | assertDoesNotThrow(RLoginClient::new); 41 | } 42 | 43 | @Test 44 | public void testDefaultPort() { 45 | assertEquals(RLoginClient.DEFAULT_PORT, newClient().getDefaultPort()); 46 | } 47 | 48 | @Test 49 | public void testGetInputStream() throws IOException { 50 | try (InputStream inputStream = newClient().getInputStream()) { 51 | assertNull(inputStream); 52 | } 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/pop3/POP3Constants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net.pop3; 18 | 19 | /** 20 | * 21 | * The POP3* tests all presume the existence of the following parameters: mailserver: localhost (running on the default port 110) account: username=test; 22 | * password=password account: username=alwaysempty; password=password. mail: At least four emails in the test account and zero emails in the alwaysempty account 23 | * 24 | * If this won't work for you, you can change these parameters in the TestSetupParameters class. 25 | * 26 | * The tests were originally run on a default installation of James. Your mileage may vary based on the POP3 server you run the tests against. Some servers are 27 | * more standards-compliant than others. 28 | */ 29 | public class POP3Constants { 30 | public static final String user = "test"; 31 | public static final String emptyuser = "alwaysempty"; 32 | public static final String password = "password"; 33 | 34 | public static final String mailhost = "localhost"; 35 | 36 | /** Cannot be instantiated. */ 37 | private POP3Constants() { 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/bsd/RCommandClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.bsd; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertEquals; 22 | import static org.junit.jupiter.api.Assertions.assertNull; 23 | 24 | import java.io.IOException; 25 | import java.io.InputStream; 26 | 27 | import org.junit.jupiter.api.Test; 28 | 29 | /** 30 | * Tests {@link RCommandClient}. 31 | */ 32 | public class RCommandClientTest { 33 | 34 | private RCommandClient newClient() { 35 | return new RCommandClient(); 36 | } 37 | 38 | @Test 39 | public void testConstructor() { 40 | assertDoesNotThrow(RCommandClient::new); 41 | } 42 | 43 | @Test 44 | public void testDefaultPort() { 45 | assertEquals(RCommandClient.DEFAULT_PORT, newClient().getDefaultPort()); 46 | } 47 | 48 | @Test 49 | public void testGetInputStream() throws IOException { 50 | try (InputStream inputStream = newClient().getInputStream()) { 51 | assertNull(inputStream); 52 | } 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/echo/EchoUDPClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.echo; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertThrows; 21 | 22 | import java.net.InetAddress; 23 | 24 | import org.junit.jupiter.api.Test; 25 | 26 | /** 27 | * Tests {@link EchoUDPClient}. 28 | */ 29 | public class EchoUDPClientTest { 30 | 31 | @Test 32 | public void testRecieve() { 33 | try (EchoUDPClient client = new EchoUDPClient()) { 34 | // Not connected 35 | assertThrows(NullPointerException.class, () -> client.receive(new byte[0])); 36 | assertThrows(NullPointerException.class, () -> client.receive(new byte[0], 0)); 37 | } 38 | } 39 | 40 | @Test 41 | public void testSend() { 42 | try (EchoUDPClient client = new EchoUDPClient()) { 43 | // Not connected 44 | assertThrows(NullPointerException.class, () -> client.send(new byte[0], InetAddress.getLocalHost())); 45 | assertThrows(NullPointerException.class, () -> client.send(new byte[0], 0, InetAddress.getLocalHost())); 46 | } 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/telnet/TelnetOptionTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net.telnet; 18 | 19 | import static org.junit.jupiter.api.Assertions.assertEquals; 20 | import static org.junit.jupiter.api.Assertions.assertFalse; 21 | import static org.junit.jupiter.api.Assertions.assertTrue; 22 | 23 | import org.junit.jupiter.api.Test; 24 | 25 | /** 26 | * JUnit test class for TelnetOption 27 | */ 28 | public class TelnetOptionTest { 29 | /** 30 | * test of the getOption method. 31 | */ 32 | @Test 33 | public void testGetOption() { 34 | assertEquals("BINARY", TelnetOption.getOption(0)); 35 | assertEquals("UNASSIGNED", TelnetOption.getOption(91)); 36 | assertEquals("Extended-Options-List", TelnetOption.getOption(255)); 37 | } 38 | 39 | /** 40 | * test of the isValidOption method. 41 | */ 42 | @Test 43 | public void testisValidOption() { 44 | assertTrue(TelnetOption.isValidOption(0)); 45 | assertTrue(TelnetOption.isValidOption(91)); 46 | assertTrue(TelnetOption.isValidOption(255)); 47 | assertFalse(TelnetOption.isValidOption(256)); 48 | } 49 | } -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/nntp/NewsgroupIterator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.nntp; 19 | 20 | import java.util.Iterator; 21 | 22 | /** 23 | * Class which wraps an {@code Iterable} of raw newgroup information to generate an {@code Iterable} of the parsed information. 24 | * 25 | * @since 3.0 26 | */ 27 | final class NewsgroupIterator implements Iterator, Iterable { 28 | 29 | private final Iterator stringIterator; 30 | 31 | public NewsgroupIterator(final Iterable iterableString) { 32 | stringIterator = iterableString.iterator(); 33 | } 34 | 35 | @Override 36 | public boolean hasNext() { 37 | return stringIterator.hasNext(); 38 | } 39 | 40 | @Override 41 | public Iterator iterator() { 42 | return this; 43 | } 44 | 45 | @Override 46 | public NewsgroupInfo next() { 47 | final String line = stringIterator.next(); 48 | return NNTPClient.parseNewsgroupListEntry(line); 49 | } 50 | 51 | @Override 52 | public void remove() { 53 | stringIterator.remove(); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/site/xdoc/faq.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 22 | 23 | FAQ - Frequently Asked Questions 24 | Apache Commons User Mailing List 25 | 26 | 27 | 28 | 29 |

30 |

31 | This document attempts to answer some of the more frequently asked 32 | questions regarding various aspects of Commons/Net. These questions are 33 | typically asked over and over again on the mailing lists, as a 34 | courtesy to the developers, we ask that you read this document 35 | before posting to the mailing lists. 36 |

37 |

38 | The FAQ is hosted on the Commons Wiki; please see: 39 | CommonsNet/FrequentlyAskedQuestions 40 |

41 |
42 | 43 | 44 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/daytime/DaytimeUDPClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.daytime; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertThrows; 22 | 23 | import java.net.InetAddress; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link DaytimeUDPClient}. 29 | */ 30 | public class DaytimeUDPClientTest { 31 | 32 | @Test 33 | public void testClose() { 34 | try (DaytimeUDPClient client = new DaytimeUDPClient()) { 35 | // empty 36 | } 37 | } 38 | 39 | @SuppressWarnings("resource") 40 | @Test 41 | public void testConstructor() { 42 | assertDoesNotThrow(DaytimeUDPClient::new); 43 | } 44 | 45 | @Test 46 | public void testGetTime() { 47 | try (DaytimeUDPClient client = new DaytimeUDPClient()) { 48 | // Not connected 49 | assertThrows(NullPointerException.class, () -> client.getTime(InetAddress.getLocalHost())); 50 | assertThrows(NullPointerException.class, () -> client.getTime(InetAddress.getLocalHost(), 0)); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/discard/DiscardUDPClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.discard; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertThrows; 22 | 23 | import java.net.InetAddress; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link DiscardUDPClient}. 29 | */ 30 | public class DiscardUDPClientTest { 31 | 32 | @SuppressWarnings("resource") 33 | @Test 34 | public void testConstructor() { 35 | assertDoesNotThrow(DiscardUDPClient::new); 36 | } 37 | 38 | @Test 39 | public void testSend() { 40 | try (DiscardUDPClient client = new DiscardUDPClient()) { 41 | // Not connected 42 | assertThrows(NullPointerException.class, () -> client.send(new byte[0], InetAddress.getLocalHost())); 43 | assertThrows(NullPointerException.class, () -> client.send(new byte[0], 0, InetAddress.getLocalHost())); 44 | assertThrows(NullPointerException.class, () -> client.send(new byte[0], 0, InetAddress.getLocalHost(), DiscardUDPClient.DEFAULT_PORT)); 45 | } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 19 | 20 | Thanks for your contribution to [Apache Commons](https://commons.apache.org/)! Your help is appreciated! 21 | 22 | Before you push a pull request, review this list: 23 | 24 | - [ ] Read the [contribution guidelines](CONTRIBUTING.md) for this project. 25 | - [ ] Read the [ASF Generative Tooling Guidance](https://www.apache.org/legal/generative-tooling.html) if you use Artificial Intelligence (AI). 26 | - [ ] I used AI to create any part of, or all of, this pull request. Which AI tool was used to create this pull request, and to what extent did it contribute? 27 | - [ ] Run a successful build using the default [Maven](https://maven.apache.org/) goal with `mvn`; that's `mvn` on the command line by itself. 28 | - [ ] Write unit tests that match behavioral changes, where the tests fail if the changes to the runtime are not applied. This may not always be possible, but it is a best practice. 29 | - [ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why. 30 | - [ ] Each commit in the pull request should have a meaningful subject line and body. Note that a maintainer may squash commits during the merge process. 31 | -------------------------------------------------------------------------------- /src/site/site.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | 21 | Apache Commons Net 22 | /images/net-logo-white.png 23 | /index.html 24 | Apache Commons Net&trade; logo 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/telnet/InvalidTelnetOptionException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.telnet; 19 | 20 | /** 21 | * The InvalidTelnetOptionException is the exception that is thrown whenever a TelnetOptionHandler with an invlaid option code is registered in TelnetClient 22 | * with addOptionHandler. 23 | */ 24 | public class InvalidTelnetOptionException extends Exception { 25 | 26 | private static final long serialVersionUID = -2516777155928793597L; 27 | 28 | /** 29 | * Option code 30 | */ 31 | private final int optionCode; 32 | 33 | /** 34 | * Error message 35 | */ 36 | private final String msg; 37 | 38 | /** 39 | * Constructor for the exception. 40 | * 41 | * @param message Error message. 42 | * @param optcode Option code. 43 | */ 44 | public InvalidTelnetOptionException(final String message, final int optcode) { 45 | optionCode = optcode; 46 | msg = message; 47 | } 48 | 49 | /** 50 | * Gets the error message of the exception. 51 | * 52 | * @return the error message. 53 | */ 54 | @Override 55 | public String getMessage() { 56 | return msg + ": " + optionCode; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/ftp/TestConnectTimeout.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net.ftp; 18 | 19 | import static org.junit.jupiter.api.Assertions.assertTrue; 20 | import static org.junit.jupiter.api.Assertions.fail; 21 | 22 | import java.io.IOException; 23 | import java.net.ConnectException; 24 | import java.net.SocketException; 25 | import java.net.SocketTimeoutException; 26 | import java.net.UnknownHostException; 27 | 28 | import org.junit.jupiter.api.Test; 29 | 30 | /** 31 | * Test the socket connect timeout functionality 32 | */ 33 | public class TestConnectTimeout { 34 | 35 | @Test 36 | public void testConnectTimeout() throws SocketException, IOException { 37 | final FTPClient client = new FTPClient(); 38 | client.setConnectTimeout(1000); 39 | 40 | try { 41 | // Connect to a valid host on a bogus port 42 | // TODO use a local server if possible 43 | client.connect("www.apache.org", 1234); 44 | fail("Expecting an Exception"); 45 | } catch (final ConnectException | SocketTimeoutException | UnknownHostException ue) { 46 | // Not much we can do about this, we may be firewalled 47 | assertTrue(true); 48 | } 49 | 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/FTPConnectionClosedException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | import java.io.IOException; 21 | 22 | /** 23 | * FTPConnectionClosedException is used to indicate the premature or unexpected closing of an FTP connection resulting from a 24 | * {@link org.apache.commons.net.ftp.FTPReply#SERVICE_NOT_AVAILABLE FTPReply.SERVICE_NOT_AVAILABLE} response (FTP reply code 421) to a failed FTP command. This 25 | * exception is derived from IOException and therefore may be caught either as an IOException or specifically as an FTPConnectionClosedException. 26 | * 27 | * @see FTP 28 | * @see FTPClient 29 | */ 30 | public class FTPConnectionClosedException extends IOException { 31 | 32 | private static final long serialVersionUID = 3500547241659379952L; 33 | 34 | /** Constructs a FTPConnectionClosedException with no message */ 35 | public FTPConnectionClosedException() { 36 | } 37 | 38 | /** 39 | * Constructs a FTPConnectionClosedException with a specified message. 40 | * 41 | * @param message The message explaining the reason for the exception. 42 | */ 43 | public FTPConnectionClosedException(final String message) { 44 | super(message); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParser.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp.parser; 19 | 20 | import java.text.ParseException; 21 | import java.util.Calendar; 22 | 23 | /** 24 | * This interface specifies the concept of parsing an FTP server's timestamp. 25 | * 26 | * @since 1.4 27 | */ 28 | public interface FTPTimestampParser { 29 | 30 | /** 31 | * the default default date format. 32 | */ 33 | String DEFAULT_SDF = UnixFTPEntryParser.DEFAULT_DATE_FORMAT; 34 | /** 35 | * the default recent date format. 36 | */ 37 | String DEFAULT_RECENT_SDF = UnixFTPEntryParser.DEFAULT_RECENT_DATE_FORMAT; 38 | 39 | /** 40 | * Parses the supplied datestamp parameter. This parameter typically would have been pulled from a longer FTP listing via the regular expression mechanism 41 | * 42 | * @param timestampStr the timestamp portion of the FTP directory listing to be parsed 43 | * @return a {@code java.util.Calendar} object initialized to the date parsed by the parser 44 | * @throws ParseException if none of the parser mechanisms belonging to the implementor can parse the input. 45 | */ 46 | Calendar parseTimestamp(String timestampStr) throws ParseException; 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/commons/net/ftpsserver/users.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # https://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # Password is "admin" 19 | ftpserver.user.admin.userpassword=21232F297A57A5A743894A0E4A801FC3 20 | ftpserver.user.admin.homedirectory=target/test-classes/org/apache/commons/net/test-data 21 | ftpserver.user.admin.enableflag=true 22 | ftpserver.user.admin.writepermission=true 23 | ftpserver.user.admin.maxloginnumber=0 24 | ftpserver.user.admin.maxloginperip=0 25 | ftpserver.user.admin.idletime=0 26 | ftpserver.user.admin.uploadrate=0 27 | ftpserver.user.admin.downloadrate=0 28 | 29 | ftpserver.user.anonymous.userpassword= 30 | ftpserver.user.anonymous.homedirectory=target/test-classes/org/apache/commons/net/test-data 31 | ftpserver.user.anonymous.enableflag=true 32 | ftpserver.user.anonymous.writepermission=false 33 | ftpserver.user.anonymous.maxloginnumber=20 34 | ftpserver.user.anonymous.maxloginperip=2 35 | ftpserver.user.anonymous.idletime=300 36 | ftpserver.user.anonymous.uploadrate=4800 37 | ftpserver.user.anonymous.downloadrate=4800 38 | 39 | # password is "test" 40 | ftpserver.user.test.userpassword=098f6bcd4621d373cade4e832627b4f6 41 | ftpserver.user.test.homedirectory=target/test-classes/org/apache/commons/net/test-data 42 | ftpserver.user.test.enableflag=true 43 | ftpserver.user.test.writepermission=true 44 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/tftp/TFTPPacketException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.tftp; 19 | 20 | /** 21 | * A class used to signify the occurrence of an error in the creation of a TFTP packet. It is not declared final so that it may be subclassed to identify more 22 | * specific errors. You would only want to do this if you were building your own TFTP client or server on top of the {@link org.apache.commons.net.tftp.TFTP} 23 | * class if you wanted more functionality than the {@link org.apache.commons.net.tftp.TFTPClient#receiveFile receiveFile()} and 24 | * {@link org.apache.commons.net.tftp.TFTPClient#sendFile sendFile()} methods provide. 25 | * 26 | * @see TFTPPacket 27 | * @see TFTP 28 | */ 29 | 30 | public class TFTPPacketException extends Exception { 31 | 32 | private static final long serialVersionUID = -8114699256840851439L; 33 | 34 | /** 35 | * Simply calls the corresponding constructor of its superclass. 36 | */ 37 | public TFTPPacketException() { 38 | } 39 | 40 | /** 41 | * Simply calls the corresponding constructor of its superclass. 42 | * 43 | * @param message the message 44 | */ 45 | public TFTPPacketException(final String message) { 46 | super(message); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/nntp/NNTPConnectionClosedException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.nntp; 19 | 20 | import java.io.IOException; 21 | 22 | /** 23 | * NNTPConnectionClosedException is used to indicate the premature or unexpected closing of an NNTP connection resulting from a 24 | * {@link org.apache.commons.net.nntp.NNTPReply#SERVICE_DISCONTINUED NNTPReply.SERVICE_DISCONTINUED} response (NNTP reply code 400) to a failed NNTP command. 25 | * This exception is derived from IOException and therefore may be caught either as an IOException or specifically as an NNTPConnectionClosedException. 26 | * 27 | * @see NNTP 28 | * @see NNTPClient 29 | */ 30 | 31 | public final class NNTPConnectionClosedException extends IOException { 32 | 33 | private static final long serialVersionUID = 1029785635891040770L; 34 | 35 | /** Constructs a NNTPConnectionClosedException with no message */ 36 | public NNTPConnectionClosedException() { 37 | } 38 | 39 | /** 40 | * Constructs a NNTPConnectionClosedException with a specified message. 41 | * 42 | * @param message The message explaining the reason for the exception. 43 | */ 44 | public NNTPConnectionClosedException(final String message) { 45 | super(message); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/smtp/SMTPConnectionClosedException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.smtp; 19 | 20 | import java.io.IOException; 21 | 22 | /** 23 | * SMTPConnectionClosedException is used to indicate the premature or unexpected closing of an SMTP connection resulting from a 24 | * {@link org.apache.commons.net.smtp.SMTPReply#SERVICE_NOT_AVAILABLE SMTPReply.SERVICE_NOT_AVAILABLE} response (SMTP reply code 421) to a failed SMTP command. 25 | * This exception is derived from IOException and therefore may be caught either as an IOException or specifically as an SMTPConnectionClosedException. 26 | * 27 | * 28 | * @see SMTP 29 | * @see SMTPClient 30 | */ 31 | public final class SMTPConnectionClosedException extends IOException { 32 | 33 | private static final long serialVersionUID = 626520434326660627L; 34 | 35 | /** Constructs a SMTPConnectionClosedException with no message */ 36 | public SMTPConnectionClosedException() { 37 | } 38 | 39 | /** 40 | * Constructs a SMTPConnectionClosedException with a specified message. 41 | * 42 | * @param message The message explaining the reason for the exception. 43 | */ 44 | public SMTPConnectionClosedException(final String message) { 45 | super(message); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/chargen/CharGenUDPClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.chargen; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertThrows; 22 | 23 | import java.net.InetAddress; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link CharGenUDPClient}. 29 | */ 30 | public class CharGenUDPClientTest { 31 | 32 | @SuppressWarnings("resource") 33 | @Test 34 | public void testConstructor() { 35 | assertDoesNotThrow(CharGenUDPClient::new); 36 | } 37 | 38 | @Test 39 | public void testReceiver() { 40 | try (CharGenUDPClient client = new CharGenUDPClient()) { 41 | // Not connected 42 | assertThrows(NullPointerException.class, client::receive); 43 | } 44 | } 45 | 46 | @Test 47 | public void testSend() { 48 | try (CharGenUDPClient client = new CharGenUDPClient()) { 49 | // Not connected 50 | assertThrows(NullPointerException.class, () -> client.send(InetAddress.getLocalHost())); 51 | assertThrows(NullPointerException.class, () -> client.send(InetAddress.getLocalHost(), CharGenUDPClient.DEFAULT_PORT)); 52 | } 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/examples/nntp/NNTPUtils.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net.examples.nntp; 18 | 19 | import java.io.IOException; 20 | import java.util.ArrayList; 21 | import java.util.List; 22 | 23 | import org.apache.commons.net.nntp.Article; 24 | import org.apache.commons.net.nntp.NNTPClient; 25 | 26 | /** 27 | * Some convenience methods for NNTP example classes. 28 | */ 29 | public class NNTPUtils { 30 | 31 | /** 32 | * Given an {@link NNTPClient} instance, and an integer range of messages, return an array of {@link Article} instances. 33 | * 34 | * @param client the client to use 35 | * @param lowArticleNumber low number 36 | * @param highArticleNumber high number 37 | * @return Article[] An array of Article 38 | * @throws IOException on error 39 | */ 40 | public static List
getArticleInfo(final NNTPClient client, final long lowArticleNumber, final long highArticleNumber) throws IOException { 41 | final List
articles = new ArrayList<>(); 42 | final Iterable
arts = client.iterateArticleInfo(lowArticleNumber, highArticleNumber); 43 | for (final Article article : arts) { 44 | articles.add(article); 45 | } 46 | return articles; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/util/TrustManagerUtilsTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.util; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertNotNull; 22 | 23 | import java.security.GeneralSecurityException; 24 | import java.security.KeyStore; 25 | import java.security.KeyStoreException; 26 | 27 | import org.junit.jupiter.api.Test; 28 | 29 | /** 30 | * Tests {@link TrustManagerUtils}. 31 | */ 32 | public class TrustManagerUtilsTest { 33 | 34 | @Test 35 | public void testGetAcceptAllTrustManager() { 36 | assertNotNull(TrustManagerUtils.getAcceptAllTrustManager()); 37 | } 38 | 39 | @Test 40 | public void testGetDefaultTrustManager() throws KeyStoreException, GeneralSecurityException { 41 | assertNotNull(TrustManagerUtils.getDefaultTrustManager(KeyStore.getInstance(KeyStore.getDefaultType()))); 42 | } 43 | 44 | @Test 45 | public void testGetValidateServerCertificateTrustManager() { 46 | assertNotNull(TrustManagerUtils.getValidateServerCertificateTrustManager()); 47 | } 48 | 49 | @SuppressWarnings("deprecation") 50 | @Test 51 | public void testToConstructor() { 52 | assertDoesNotThrow(TrustManagerUtils::new); 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/telnet/EchoOptionHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.telnet; 19 | 20 | /** 21 | * Implements the Telnet echo option RFC 857. 22 | */ 23 | public class EchoOptionHandler extends TelnetOptionHandler { 24 | /** 25 | * Constructor for the EchoOptionHandler. Initial and accept behavior flags are set to false 26 | */ 27 | public EchoOptionHandler() { 28 | super(TelnetOption.ECHO, false, false, false, false); 29 | } 30 | 31 | /** 32 | * Constructor for the EchoOptionHandler. Allows defining desired initial setting for local/remote activation of this option and behavior in case a 33 | * local/remote activation request for this option is received. 34 | * 35 | * @param initlocal if set to true, a WILL is sent upon connection. 36 | * @param initremote if set to true, a DO is sent upon connection. 37 | * @param acceptlocal if set to true, any DO request is accepted. 38 | * @param acceptremote if set to true, any WILL request is accepted. 39 | */ 40 | public EchoOptionHandler(final boolean initlocal, final boolean initremote, final boolean acceptlocal, final boolean acceptremote) { 41 | super(TelnetOption.ECHO, initlocal, initremote, acceptlocal, acceptremote); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/imap/AuthenticatingIMAPClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.imap; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertEquals; 21 | 22 | import java.util.stream.Stream; 23 | 24 | import org.junit.jupiter.params.ParameterizedTest; 25 | import org.junit.jupiter.params.provider.Arguments; 26 | import org.junit.jupiter.params.provider.MethodSource; 27 | 28 | public class AuthenticatingIMAPClientTest { 29 | 30 | private static Stream authMethods() { 31 | return Stream.of( 32 | Arguments.of("PLAIN", AuthenticatingIMAPClient.AUTH_METHOD.PLAIN), 33 | Arguments.of("CRAM-MD5", AuthenticatingIMAPClient.AUTH_METHOD.CRAM_MD5), 34 | Arguments.of("LOGIN", AuthenticatingIMAPClient.AUTH_METHOD.LOGIN), 35 | Arguments.of("XOAUTH", AuthenticatingIMAPClient.AUTH_METHOD.XOAUTH), 36 | Arguments.of("XOAUTH2", AuthenticatingIMAPClient.AUTH_METHOD.XOAUTH2) 37 | ); 38 | } 39 | 40 | @ParameterizedTest(name = "auth method for method {1} is `{0}`") 41 | @MethodSource("authMethods") 42 | public void getAuthName(final String expectedAuthMethodName, final AuthenticatingIMAPClient.AUTH_METHOD authMethod) { 43 | assertEquals(expectedAuthMethodName, authMethod.getAuthName()); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/MalformedServerReplyException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net; 19 | 20 | import java.io.IOException; 21 | 22 | /** 23 | * This exception is used to indicate that the reply from a server could not be interpreted. Most of the NetComponents classes attempt to be as lenient as 24 | * possible when receiving server replies. Many server implementations deviate from IETF protocol specifications, making it necessary to be as flexible as 25 | * possible. However, there will be certain situations where it is not possible to continue an operation because the server reply could not be interpreted in a 26 | * meaningful manner. In these cases, a MalformedServerReplyException should be thrown. 27 | */ 28 | public class MalformedServerReplyException extends IOException { 29 | 30 | private static final long serialVersionUID = 6006765264250543945L; 31 | 32 | /** Constructs a MalformedServerReplyException with no message */ 33 | public MalformedServerReplyException() { 34 | } 35 | 36 | /** 37 | * Constructs a MalformedServerReplyException with a specified message. 38 | * 39 | * @param message The message explaining the reason for the exception. 40 | */ 41 | public MalformedServerReplyException(final String message) { 42 | super(message); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/nntp/ArticleIterator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.nntp; 19 | 20 | import java.util.Iterator; 21 | 22 | /** 23 | * Class which wraps an {@code Iterable} of raw article information to generate an {@code Iterable
} of the parsed information. 24 | * 25 | * @since 3.0 26 | */ 27 | final class ArticleIterator implements Iterator
, Iterable
{ 28 | 29 | private final Iterator stringIterator; 30 | 31 | public ArticleIterator(final Iterable iterableString) { 32 | stringIterator = iterableString.iterator(); 33 | } 34 | 35 | @Override 36 | public boolean hasNext() { 37 | return stringIterator.hasNext(); 38 | } 39 | 40 | @Override 41 | public Iterator
iterator() { 42 | return this; 43 | } 44 | 45 | /** 46 | * Gets the next Article 47 | * 48 | * @return the next {@link Article}, never {@code null}, if unparseable then isDummy() will be true, and the subject will contain the raw info. 49 | */ 50 | @Override 51 | public Article next() { 52 | final String line = stringIterator.next(); 53 | return NNTPClient.parseArticleEntry(line); 54 | } 55 | 56 | @Override 57 | public void remove() { 58 | stringIterator.remove(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/telnet/SuppressGAOptionHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.telnet; 19 | 20 | /** 21 | * Implements the Telnet suppress go ahead option RFC 858. 22 | */ 23 | public class SuppressGAOptionHandler extends TelnetOptionHandler { 24 | /** 25 | * Constructor for the SuppressGAOptionHandler. Initial and accept behavior flags are set to false 26 | */ 27 | public SuppressGAOptionHandler() { 28 | super(TelnetOption.SUPPRESS_GO_AHEAD, false, false, false, false); 29 | } 30 | 31 | /** 32 | * Constructor for the SuppressGAOptionHandler. Allows defining desired initial setting for local/remote activation of this option and behavior in case a 33 | * local/remote activation request for this option is received. 34 | * 35 | * @param initlocal if set to true, a WILL is sent upon connection. 36 | * @param initremote if set to true, a DO is sent upon connection. 37 | * @param acceptlocal if set to true, any DO request is accepted. 38 | * @param acceptremote if set to true, any WILL request is accepted. 39 | */ 40 | public SuppressGAOptionHandler(final boolean initlocal, final boolean initremote, final boolean acceptlocal, final boolean acceptremote) { 41 | super(TelnetOption.SUPPRESS_GO_AHEAD, initlocal, initremote, acceptlocal, acceptremote); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/FTPSTrustManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | import java.security.cert.CertificateException; 21 | import java.security.cert.X509Certificate; 22 | 23 | import javax.net.ssl.X509TrustManager; 24 | 25 | import org.apache.commons.net.util.NetConstants; 26 | 27 | /** 28 | * Do not use. 29 | * 30 | * @since 2.0 31 | * @deprecated 3.0 use {@link org.apache.commons.net.util.TrustManagerUtils#getValidateServerCertificateTrustManager() 32 | * TrustManagerUtils#getValidateServerCertificateTrustManager()} instead 33 | */ 34 | @Deprecated 35 | public class FTPSTrustManager implements X509TrustManager { 36 | 37 | /** 38 | * Constructs a new instance. 39 | */ 40 | public FTPSTrustManager() { 41 | // empty 42 | } 43 | 44 | /** 45 | * No-op 46 | */ 47 | @Override 48 | public void checkClientTrusted(final X509Certificate[] certificates, final String authType) { 49 | } 50 | 51 | @Override 52 | public void checkServerTrusted(final X509Certificate[] certificates, final String authType) throws CertificateException { 53 | for (final X509Certificate certificate : certificates) { 54 | certificate.checkValidity(); 55 | } 56 | } 57 | 58 | @Override 59 | public X509Certificate[] getAcceptedIssuers() { 60 | return NetConstants.EMPTY_X509_CERTIFICATE_ARRAY; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/telnet/SimpleOptionHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.telnet; 19 | 20 | /** 21 | * Simple option handler that can be used for options that don't require subnegotiation. 22 | */ 23 | public class SimpleOptionHandler extends TelnetOptionHandler { 24 | /** 25 | * Constructor for the SimpleOptionHandler. Initial and accept behavior flags are set to false 26 | * 27 | * @param optcode option code. 28 | */ 29 | public SimpleOptionHandler(final int optcode) { 30 | super(optcode, false, false, false, false); 31 | } 32 | 33 | /** 34 | * Constructor for the SimpleOptionHandler. Allows defining desired initial setting for local/remote activation of this option and behavior in case a 35 | * local/remote activation request for this option is received. 36 | * 37 | * @param optcode option code. 38 | * @param initlocal if set to true, a WILL is sent upon connection. 39 | * @param initremote if set to true, a DO is sent upon connection. 40 | * @param acceptlocal if set to true, any DO request is accepted. 41 | * @param acceptremote if set to true, any WILL request is accepted. 42 | */ 43 | public SimpleOptionHandler(final int optcode, final boolean initlocal, final boolean initremote, final boolean acceptlocal, final boolean acceptremote) { 44 | super(optcode, initlocal, initremote, acceptlocal, acceptremote); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/parser/ParserInitializationException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp.parser; 19 | 20 | /** 21 | * This class encapsulates all errors that may be thrown by the process of an FTPFileEntryParserFactory creating and instantiating an FTPFileEntryParser. 22 | */ 23 | public class ParserInitializationException extends RuntimeException { 24 | 25 | private static final long serialVersionUID = 5563335279583210658L; 26 | 27 | /** 28 | * Constructs a ParserInitializationException with just a message 29 | * 30 | * @param message Exception message 31 | */ 32 | public ParserInitializationException(final String message) { 33 | super(message); 34 | } 35 | 36 | /** 37 | * Constructs a ParserInitializationException with a message and a root cause. 38 | * 39 | * @param message Exception message 40 | * @param rootCause root cause throwable that caused this to be thrown 41 | */ 42 | public ParserInitializationException(final String message, final Throwable rootCause) { 43 | super(message, rootCause); 44 | } 45 | 46 | /** 47 | * Gets the root cause of this exception or null if no root cause was specified. 48 | * 49 | * @return the root cause of this exception being thrown 50 | * @deprecated Use {@link #getCause()} instead 51 | */ 52 | @Deprecated 53 | public Throwable getRootCause() { 54 | return super.getCause(); 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/SocketClientFunctionalTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net; 18 | 19 | import static org.junit.jupiter.api.Assertions.assertTrue; 20 | 21 | import java.net.InetSocketAddress; 22 | import java.net.Proxy; 23 | 24 | import org.apache.commons.net.ftp.FTPClient; 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * A simple functional test class for SocketClients. 29 | * 30 | * Requires a Java-compatible SOCK proxy server on 127.0.0.1:9050 and access to ftp.gnu.org. 31 | */ 32 | public class SocketClientFunctionalTest { 33 | private static final String PROXY_HOST = "127.0.0.1"; 34 | private static final int PROXY_PORT = 9050; 35 | private static final String DEST_HOST = "ftp.gnu.org"; 36 | private static final int DEST_PORT = 21; 37 | // any subclass will do, but it should be able to connect to the destination host 38 | SocketClient sc = new FTPClient(); 39 | 40 | /** 41 | * A simple test to verify that the Proxy settings work. 42 | * 43 | * @throws Exception in case of connection errors 44 | */ 45 | @Test 46 | public void testProxySettings() throws Exception { 47 | // NOTE: HTTP Proxies seem to be invalid for raw sockets 48 | final Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(PROXY_HOST, PROXY_PORT)); 49 | sc.setProxy(proxy); 50 | sc.connect(DEST_HOST, DEST_PORT); 51 | assertTrue(sc.isConnected()); 52 | sc.disconnect(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ProtocolCommandListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net; 19 | 20 | import java.util.EventListener; 21 | 22 | /** 23 | * There exists a large class of IETF protocols that work by sending an ASCII text command and arguments to a server, and then receiving an ASCII text reply. 24 | * For debugging and other purposes, it is extremely useful to log or keep track of the contents of the protocol messages. The ProtocolCommandListener interface 25 | * coupled with the {@link ProtocolCommandEvent} class facilitate this process. 26 | *

27 | * To receive ProtocolCommandEvents, you merely implement the ProtocolCommandListener interface and register the class as a listener with a ProtocolCommandEvent 28 | * source such as {@link org.apache.commons.net.ftp.FTPClient}. 29 | *

30 | * 31 | * @see ProtocolCommandEvent 32 | * @see ProtocolCommandSupport 33 | */ 34 | public interface ProtocolCommandListener extends EventListener { 35 | 36 | /** 37 | * This method is invoked by a ProtocolCommandEvent source after sending a protocol command to a server. 38 | * 39 | * @param event The ProtocolCommandEvent fired. 40 | */ 41 | void protocolCommandSent(ProtocolCommandEvent event); 42 | 43 | /** 44 | * This method is invoked by a ProtocolCommandEvent source after receiving a reply from a server. 45 | * 46 | * @param event The ProtocolCommandEvent fired. 47 | */ 48 | void protocolReplyReceived(ProtocolCommandEvent event); 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/site/xdoc/tasks.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 21 | Tasks 22 | Jeffrey D. Brekke 23 | Rory Winston 24 | 25 | 26 |
27 |
    28 |
  • Add more unit tests, and implement mock servers for testing
  • 29 |
  • 30 | Convert code to specified coding standards. Checkstyle report provided. 31 |
  • 32 |
  • 33 | Clean out any classes that don't belong in this project. Probably classes from 34 | org.apache.commons.net.util and org.apache.commons.net.io could be moved to their corresponding commons projects. 35 |
  • 36 |
  • 37 | Parse the client/server interactions without creating so many 38 | strings. Many operations are slow because of this. 39 |
  • 40 |
  • 41 | Add ESMTP and more extended NNTP commands. 42 |
  • 43 |
  • 44 | Make NNTPClient.listNewsgroups() and NNTPClient.listNewNews() 45 | more efficient. Don't preparse into lots of little objects. 46 |
  • 47 |
  • FTP proxy support
  • 48 |
49 |
50 | 51 |
52 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/nntp/Threadable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.nntp; 19 | 20 | /** 21 | * A placeholder interface for threadable message objects. 22 | * 23 | * @param The Threadable implementation. 24 | */ 25 | public interface Threadable> { 26 | 27 | /** 28 | * Tests whether this is a dummy instance. 29 | * 30 | * @return whether this is a dummy instance. 31 | */ 32 | boolean isDummy(); 33 | 34 | /** 35 | * Creates a dummy instance. 36 | * 37 | * @return a dummy instance. 38 | */ 39 | T makeDummy(); 40 | 41 | /** 42 | * Gets an ID. 43 | * 44 | * @return an ID. 45 | */ 46 | String messageThreadId(); 47 | 48 | /** 49 | * Gets reference strings. 50 | * 51 | * @return reference strings. 52 | */ 53 | String[] messageThreadReferences(); 54 | 55 | /** 56 | * Sets the child instance. 57 | * 58 | * @param child the child instance. 59 | */ 60 | void setChild(T child); 61 | 62 | /** 63 | * Sets the next instance. 64 | * 65 | * @param next the next instance. 66 | */ 67 | void setNext(T next); 68 | 69 | /** 70 | * Gets the simplified subject. 71 | * 72 | * @return the simplified subject. 73 | */ 74 | String simplifiedSubject(); 75 | 76 | /** 77 | * Tests whether this is a reply. 78 | * 79 | * @return whether this is a reply. 80 | */ 81 | boolean subjectIsReply(); 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/io/SocketInputStream.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.io; 19 | 20 | import java.io.FilterInputStream; 21 | import java.io.IOException; 22 | import java.io.InputStream; 23 | import java.net.Socket; 24 | 25 | /** 26 | * This class wraps an input stream, storing a reference to its originating socket. When the stream is closed, it will also close the socket immediately 27 | * afterward. This class is useful for situations where you are dealing with a stream originating from a socket, but do not have a reference to the socket, and 28 | * want to make sure it closes when the stream closes. 29 | * 30 | * @see SocketOutputStream 31 | */ 32 | public class SocketInputStream extends FilterInputStream { 33 | private final Socket socket; 34 | 35 | /** 36 | * Creates a SocketInputStream instance wrapping an input stream and storing a reference to a socket that should be closed on closing the stream. 37 | * 38 | * @param socket The socket to close on closing the stream. 39 | * @param stream The input stream to wrap. 40 | */ 41 | public SocketInputStream(final Socket socket, final InputStream stream) { 42 | super(stream); 43 | this.socket = socket; 44 | } 45 | 46 | /** 47 | * Closes the stream and immediately afterward closes the referenced socket. 48 | * 49 | * @throws IOException If there is an error in closing the stream or socket. 50 | */ 51 | @Override 52 | public void close() throws IOException { 53 | super.close(); 54 | socket.close(); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/bsd/RExecClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.bsd; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 21 | import static org.junit.jupiter.api.Assertions.assertEquals; 22 | import static org.junit.jupiter.api.Assertions.assertNull; 23 | 24 | import java.io.IOException; 25 | import java.io.InputStream; 26 | import java.io.OutputStream; 27 | 28 | import org.junit.jupiter.api.Test; 29 | 30 | /** 31 | * Tests {@link RExecClient}. 32 | */ 33 | public class RExecClientTest { 34 | 35 | private RExecClient newClient() { 36 | return new RExecClient(); 37 | } 38 | 39 | @Test 40 | public void testConstructor() { 41 | assertDoesNotThrow(RExecClient::new); 42 | } 43 | 44 | @Test 45 | public void testDefaultPort() { 46 | assertEquals(RExecClient.DEFAULT_PORT, newClient().getDefaultPort()); 47 | } 48 | 49 | @Test 50 | public void testGetErrorStream() throws IOException { 51 | try (InputStream inputStream = newClient().getErrorStream()) { 52 | assertNull(inputStream); 53 | } 54 | } 55 | 56 | @Test 57 | public void testGetInputStream() throws IOException { 58 | try (InputStream inputStream = newClient().getInputStream()) { 59 | assertNull(inputStream); 60 | } 61 | } 62 | 63 | @Test 64 | public void testGetOutputStream() throws IOException { 65 | try (OutputStream outputStream = newClient().getOutputStream()) { 66 | assertNull(outputStream); 67 | } 68 | } 69 | 70 | } 71 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/time/TimeUDPClientTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.time; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertEquals; 21 | import static org.junit.jupiter.api.Assertions.assertThrows; 22 | 23 | import java.net.InetAddress; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Tests {@link TimeUDPClient}. 29 | */ 30 | public class TimeUDPClientTest { 31 | 32 | @Test 33 | public void testConstructor() { 34 | try (TimeUDPClient client = new TimeUDPClient()) { 35 | // empty 36 | } 37 | } 38 | 39 | @Test 40 | public void testGetDate() { 41 | try (TimeUDPClient client = new TimeUDPClient()) { 42 | // Not connected failures 43 | assertThrows(NullPointerException.class, () -> client.getDate(InetAddress.getLocalHost())); 44 | assertThrows(NullPointerException.class, () -> client.getDate(InetAddress.getLocalHost(), TimeUDPClient.DEFAULT_PORT)); 45 | } 46 | } 47 | 48 | @Test 49 | public void testGetTime() { 50 | try (TimeUDPClient client = new TimeUDPClient()) { 51 | // Not connected failures 52 | assertThrows(NullPointerException.class, () -> client.getTime(InetAddress.getLocalHost())); 53 | assertThrows(NullPointerException.class, () -> client.getTime(InetAddress.getLocalHost(), TimeUDPClient.DEFAULT_PORT)); 54 | } 55 | } 56 | 57 | @Test 58 | public void testToTime() { 59 | final byte[] timeData = new byte[4]; 60 | assertEquals(0, TimeUDPClient.toTime(timeData)); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/telnet/TelnetNotificationHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.telnet; 19 | 20 | /** 21 | * The TelnetNotificationHandler interface can be used to handle notification of options negotiation commands received on a Telnet session. 22 | *

23 | * The user can implement this interface and register a TelnetNotificationHandler by using the registerNotificationHandler() of TelnetClient to be notified of 24 | * option negotiation commands. 25 | *

26 | */ 27 | public interface TelnetNotificationHandler { 28 | /** 29 | * The remote party sent a DO command. 30 | */ 31 | int RECEIVED_DO = 1; 32 | 33 | /** 34 | * The remote party sent a {@code DONT} command. 35 | */ 36 | int RECEIVED_DONT = 2; 37 | 38 | /** 39 | * The remote party sent a {@code WILL} command. 40 | */ 41 | int RECEIVED_WILL = 3; 42 | 43 | /** 44 | * The remote party sent a {@code WONT} command. 45 | */ 46 | int RECEIVED_WONT = 4; 47 | 48 | /** 49 | * The remote party sent a {@code COMMAND}. 50 | * 51 | * @since 2.2 52 | */ 53 | int RECEIVED_COMMAND = 5; 54 | 55 | /** 56 | * Callback method called when TelnetClient receives a command or option negotiation command 57 | * 58 | * @param negotiation_code type of (negotiation) command received (RECEIVED_DO, RECEIVED_DONT, RECEIVED_WILL, RECEIVED_WONT, RECEIVED_COMMAND) 59 | * @param option_code code of the option negotiated, or the command code itself (e.g. NOP). 60 | */ 61 | void receivedNegotiation(int negotiation_code, int option_code); 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/util/Charsets.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.util; 19 | 20 | import java.nio.charset.Charset; 21 | 22 | /** 23 | * Helps to deal with Charsets. 24 | * 25 | * @since 3.3 26 | * @deprecated Use {@link org.apache.commons.io.Charsets}. 27 | */ 28 | @Deprecated 29 | public class Charsets { 30 | 31 | /** 32 | * Returns a charset object for the given charset name. 33 | * 34 | * @param charsetName The name of the requested charset; may be a canonical name, an alias, or null. If null, return the default charset. 35 | * @return A charset object for the named charset 36 | */ 37 | public static Charset toCharset(final String charsetName) { 38 | return charsetName == null ? Charset.defaultCharset() : Charset.forName(charsetName); 39 | } 40 | 41 | /** 42 | * Returns a charset object for the given charset name. 43 | * 44 | * @param charsetName The name of the requested charset; may be a canonical name, an alias, or null. If null, return the default charset. 45 | * @param defaultCharsetName the charset name to use if the requested charset is null 46 | * @return A charset object for the named charset 47 | */ 48 | public static Charset toCharset(final String charsetName, final String defaultCharsetName) { 49 | return charsetName == null ? Charset.forName(defaultCharsetName) : Charset.forName(charsetName); 50 | } 51 | 52 | /** 53 | * Depreacted. 54 | * 55 | * @deprecated Will be removed in 2.0. 56 | */ 57 | @Deprecated 58 | public Charsets() { 59 | // empty 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/discard/DiscardTCPClient.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.discard; 19 | 20 | import java.io.OutputStream; 21 | 22 | import org.apache.commons.net.SocketClient; 23 | 24 | /** 25 | * The DiscardTCPClient class is a TCP implementation of a client for the Discard protocol described in RFC 863. To use the class, merely establish a connection 26 | * with {@link org.apache.commons.net.SocketClient#connect connect} and call {@link #getOutputStream getOutputStream()} to retrieve the discard output stream. 27 | * Don't close the output stream when you're done writing to it. Rather, call {@link org.apache.commons.net.SocketClient#disconnect disconnect} to clean up 28 | * properly. 29 | * 30 | * @see DiscardUDPClient 31 | */ 32 | public class DiscardTCPClient extends SocketClient { 33 | 34 | /** The default discard port. It is set to 9 according to RFC 863. */ 35 | public static final int DEFAULT_PORT = 9; 36 | 37 | /** 38 | * The default DiscardTCPClient constructor. It merely sets the default port to {@code DEFAULT_PORT}. 39 | */ 40 | public DiscardTCPClient() { 41 | setDefaultPort(DEFAULT_PORT); 42 | } 43 | 44 | /** 45 | * Gets an OutputStream through which you may write data to the server. You should NOT close the OutputStream when you're finished reading from it. 46 | * Rather, you should call {@link org.apache.commons.net.SocketClient#disconnect disconnect} to clean up properly. 47 | * 48 | * @return An OutputStream through which you can write data to the server. 49 | */ 50 | public OutputStream getOutputStream() { 51 | return _output_; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/examples/telnet/WeatherTelnet.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.examples.telnet; 19 | 20 | import java.io.IOException; 21 | 22 | import org.apache.commons.net.examples.util.IOUtil; 23 | import org.apache.commons.net.telnet.TelnetClient; 24 | 25 | /** 26 | * This is an example of a trivial use of the TelnetClient class. It connects to the weather server at the University of Michigan, um-weather.sprl.umich.edu 27 | * port 3000, and allows the user to interact with the server via standard input. You could use this example to connect to any Telnet server, but it is 28 | * obviously not general purpose because it reads from standard input a line at a time, making it inconvenient for use with a remote interactive shell. The 29 | * TelnetClient class used by itself is mostly intended for automating access to Telnet resources rather than interactive use. 30 | */ 31 | 32 | // This class requires the IOUtil support class! 33 | public final class WeatherTelnet { 34 | 35 | public static void main(final String[] args) { 36 | final TelnetClient telnet; 37 | 38 | telnet = new TelnetClient(); 39 | 40 | try { 41 | telnet.connect("rainmaker.wunderground.com", 3000); 42 | } catch (final IOException e) { 43 | e.printStackTrace(); 44 | System.exit(1); 45 | } 46 | 47 | IOUtil.readWrite(telnet.getInputStream(), telnet.getOutputStream(), System.in, System.out); 48 | 49 | try { 50 | telnet.disconnect(); 51 | } catch (final IOException e) { 52 | e.printStackTrace(); 53 | System.exit(1); 54 | } 55 | 56 | System.exit(0); 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/parser/CompositeFileEntryParser.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp.parser; 19 | 20 | import org.apache.commons.net.ftp.FTPFile; 21 | import org.apache.commons.net.ftp.FTPFileEntryParser; 22 | import org.apache.commons.net.ftp.FTPFileEntryParserImpl; 23 | 24 | /** 25 | * This implementation allows to pack some FileEntryParsers together and handle the case where the returned dir style isn't clearly defined. The matching parser 26 | * will be cached. If the cached parser won't match due to the server changed the dir style, a new matching parser will be searched. 27 | */ 28 | public class CompositeFileEntryParser extends FTPFileEntryParserImpl { 29 | private final FTPFileEntryParser[] ftpFileEntryParsers; 30 | private FTPFileEntryParser cachedFtpFileEntryParser; 31 | 32 | /** 33 | * Constructs a new instance. 34 | * 35 | * @param ftpFileEntryParsers An array of FTPFileEntryParser. 36 | */ 37 | public CompositeFileEntryParser(final FTPFileEntryParser[] ftpFileEntryParsers) { 38 | this.cachedFtpFileEntryParser = null; 39 | this.ftpFileEntryParsers = ftpFileEntryParsers; 40 | } 41 | 42 | @Override 43 | public FTPFile parseFTPEntry(final String listEntry) { 44 | if (cachedFtpFileEntryParser != null) { 45 | return cachedFtpFileEntryParser.parseFTPEntry(listEntry); 46 | } 47 | for (final FTPFileEntryParser ftpFileEntryParser : ftpFileEntryParsers) { 48 | final FTPFile matched = ftpFileEntryParser.parseFTPEntry(listEntry); 49 | if (matched != null) { 50 | cachedFtpFileEntryParser = ftpFileEntryParser; 51 | return matched; 52 | } 53 | } 54 | return null; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/ftp/NoProtocolSslConfigurationProxy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | import java.security.GeneralSecurityException; 21 | 22 | import javax.net.ssl.SSLContext; 23 | import javax.net.ssl.SSLSocketFactory; 24 | 25 | import org.apache.ftpserver.ssl.ClientAuth; 26 | import org.apache.ftpserver.ssl.SslConfiguration; 27 | 28 | /** 29 | * Tests FTPSERVER-491. 30 | * 31 | * See 32 | * https://issues.apache.org/jira/browse/FTPSERVER-491 33 | */ 34 | public class NoProtocolSslConfigurationProxy implements SslConfiguration { 35 | 36 | private final SslConfiguration sslConfiguration; 37 | 38 | public NoProtocolSslConfigurationProxy(final SslConfiguration sslConfiguration) { 39 | this.sslConfiguration = sslConfiguration; 40 | } 41 | 42 | @Override 43 | public ClientAuth getClientAuth() { 44 | return sslConfiguration.getClientAuth(); 45 | } 46 | 47 | @Override 48 | public String[] getEnabledCipherSuites() { 49 | return sslConfiguration.getEnabledCipherSuites(); 50 | } 51 | 52 | @Override 53 | public String getEnabledProtocol() { 54 | return DEFAULT_ENABLED_PROTOCOL; 55 | } 56 | 57 | @Override 58 | public SSLSocketFactory getSocketFactory() throws GeneralSecurityException { 59 | return sslConfiguration.getSocketFactory(); 60 | } 61 | 62 | @Override 63 | public SSLContext getSSLContext() throws GeneralSecurityException { 64 | return sslConfiguration.getSSLContext(); 65 | } 66 | 67 | @Override 68 | public SSLContext getSSLContext(final String protocol) throws GeneralSecurityException { 69 | return sslConfiguration.getSSLContext(protocol); 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/DatagramSocketFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net; 19 | 20 | import java.net.DatagramSocket; 21 | import java.net.InetAddress; 22 | import java.net.SocketException; 23 | 24 | /** 25 | * The DatagramSocketFactory interface provides a means for the programmer to control the creation of datagram sockets and provide his own DatagramSocket 26 | * implementations for use by all classes derived from {@link org.apache.commons.net.DatagramSocketClient} . This allows you to provide your own DatagramSocket 27 | * implementations and to perform security checks or browser capability requests before creating a DatagramSocket. 28 | */ 29 | public interface DatagramSocketFactory { 30 | 31 | /** 32 | * Creates a DatagramSocket on the local host at the first available port. 33 | * 34 | * @return the socket 35 | * @throws SocketException If the socket could not be created. 36 | */ 37 | DatagramSocket createDatagramSocket() throws SocketException; 38 | 39 | /** 40 | * Creates a DatagramSocket on the local host at a specified port. 41 | * 42 | * @param port The port to use for the socket. 43 | * @return the socket 44 | * @throws SocketException If the socket could not be created. 45 | */ 46 | DatagramSocket createDatagramSocket(int port) throws SocketException; 47 | 48 | /** 49 | * Creates a DatagramSocket at the specified address on the local host at a specified port. 50 | * 51 | * @param port The port to use for the socket. 52 | * @param localAddress The local address to use. 53 | * @return the socket 54 | * @throws SocketException If the socket could not be created. 55 | */ 56 | DatagramSocket createDatagramSocket(int port, InetAddress localAddress) throws SocketException; 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/echo/EchoTCPClient.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.echo; 19 | 20 | import java.io.InputStream; 21 | 22 | import org.apache.commons.net.discard.DiscardTCPClient; 23 | 24 | /** 25 | * The EchoTCPClient class is a TCP implementation of a client for the Echo protocol described in RFC 862. To use the class, merely establish a connection with 26 | * {@link org.apache.commons.net.SocketClient#connect connect} and call {@link DiscardTCPClient#getOutputStream getOutputStream()} to retrieve the echo output 27 | * stream and {@link #getInputStream getInputStream()} to get the echo input stream. Don't close either stream when you're done using them. Rather, call 28 | * {@link org.apache.commons.net.SocketClient#disconnect disconnect} to clean up properly. 29 | * 30 | * @see EchoUDPClient 31 | * @see DiscardTCPClient 32 | */ 33 | public final class EchoTCPClient extends DiscardTCPClient { 34 | 35 | /** The default echo port. It is set to 7 according to RFC 862. */ 36 | public static final int DEFAULT_PORT = 7; 37 | 38 | /** 39 | * The default EchoTCPClient constructor. It merely sets the default port to {@code DEFAULT_PORT}. 40 | */ 41 | public EchoTCPClient() { 42 | setDefaultPort(DEFAULT_PORT); 43 | } 44 | 45 | /** 46 | * Gets the time string from the specified server and port and returns it. an InputStream from which you may read echoed data from the server. You should 47 | * NOT close the InputStream when you're finished reading from it. Rather, you should call {@link org.apache.commons.net.SocketClient#disconnect disconnect 48 | * } to clean up properly. 49 | * 50 | * @return An InputStream from which you can read echoed data from the server. 51 | */ 52 | public InputStream getInputStream() { 53 | return _input_; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/daytime/DaytimeTCPClient.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.daytime; 19 | 20 | import java.io.IOException; 21 | 22 | import org.apache.commons.io.IOUtils; 23 | import org.apache.commons.net.SocketClient; 24 | 25 | /** 26 | * The DaytimeTCPClient class is a TCP implementation of a client for the Daytime protocol described in RFC 867. To use the class, merely establish a connection 27 | * with {@link org.apache.commons.net.SocketClient#connect connect} and call {@link #getTime getTime()} to retrieve the daytime string, then call 28 | * {@link org.apache.commons.net.SocketClient#disconnect disconnect} to close the connection properly. 29 | * 30 | * @see DaytimeUDPClient 31 | */ 32 | public final class DaytimeTCPClient extends SocketClient { 33 | 34 | /** 35 | * The default daytime port {@value} per RFC 867. 36 | */ 37 | public static final int DEFAULT_PORT = 13; 38 | 39 | /** 40 | * The default DaytimeTCPClient constructor. It merely sets the default port to {@code DEFAULT_PORT}. 41 | */ 42 | public DaytimeTCPClient() { 43 | setDefaultPort(DEFAULT_PORT); 44 | } 45 | 46 | /** 47 | * Gets the time string from the server and returns it. The server will have closed the connection at this point, so you should call 48 | * {@link org.apache.commons.net.SocketClient#disconnect disconnect} after calling this method. To retrieve another time, you must initiate another 49 | * connection with {@link org.apache.commons.net.SocketClient#connect connect} before calling {@code getTime()} again. 50 | * 51 | * @return The time string retrieved from the server. 52 | * @throws IOException If an error occurs while fetching the time string. 53 | */ 54 | public String getTime() throws IOException { 55 | return IOUtils.toString(_input_, getCharset()); 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/telnet/EchoOptionHandlerTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net.telnet; 18 | 19 | import static org.junit.jupiter.api.Assertions.assertEquals; 20 | import static org.junit.jupiter.api.Assertions.assertNull; 21 | 22 | import org.junit.jupiter.api.BeforeEach; 23 | import org.junit.jupiter.api.Test; 24 | 25 | /** 26 | * JUnit test class for EchoOptionHandler 27 | */ 28 | public class EchoOptionHandlerTest extends AbstractTelnetOptionHandlerTest { 29 | 30 | /** 31 | * setUp for the test. 32 | */ 33 | @BeforeEach 34 | protected void setUp() { 35 | opthand1 = new EchoOptionHandler(); 36 | opthand2 = new EchoOptionHandler(true, true, true, true); 37 | opthand3 = new EchoOptionHandler(false, false, false, false); 38 | } 39 | 40 | /** 41 | * test of server-driven subnegotiation. Checks that no subnegotiation is made. 42 | */ 43 | @Test 44 | public void testAnswerSubnegotiation() { 45 | final int[] subn = { TelnetCommand.IAC, TelnetCommand.SB, TelnetOption.ECHO, 1, TelnetCommand.IAC, TelnetCommand.SE, }; 46 | 47 | final int[] resp1 = opthand1.answerSubnegotiation(subn, subn.length); 48 | 49 | assertNull(resp1); 50 | } 51 | 52 | /** 53 | * test of the constructors. 54 | */ 55 | @Override 56 | @Test 57 | public void testConstructors() { 58 | assertEquals(TelnetOption.ECHO, opthand1.getOptionCode()); 59 | super.testConstructors(); 60 | } 61 | 62 | /** 63 | * test of client-driven subnegotiation. Checks that no subnegotiation is made. 64 | */ 65 | @Test 66 | public void testStartSubnegotiation() { 67 | final int[] resp1 = opthand1.startSubnegotiationLocal(); 68 | final int[] resp2 = opthand1.startSubnegotiationRemote(); 69 | 70 | assertNull(resp1); 71 | assertNull(resp2); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/io/CRLFLineReader.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.io; 19 | 20 | import java.io.BufferedReader; 21 | import java.io.IOException; 22 | import java.io.Reader; 23 | 24 | import org.apache.commons.net.util.NetConstants; 25 | 26 | /** 27 | * CRLFLineReader implements a readLine() method that requires exactly CRLF to terminate an input line. This is required for IMAP, which allows bare CR and LF. 28 | * 29 | * @since 3.0 30 | */ 31 | public final class CRLFLineReader extends BufferedReader { 32 | private static final char LF = '\n'; 33 | private static final char CR = '\r'; 34 | 35 | /** 36 | * Creates a CRLFLineReader that wraps an existing Reader input source. 37 | * 38 | * @param reader The Reader input source. 39 | */ 40 | public CRLFLineReader(final Reader reader) { 41 | super(reader); 42 | } 43 | 44 | /** 45 | * Reads a line of text. A line is considered to be terminated by carriage return followed immediately by a linefeed. This contrasts with BufferedReader 46 | * which also allows other combinations. 47 | * 48 | * @since 3.0 49 | */ 50 | @Override 51 | public String readLine() throws IOException { 52 | final StringBuilder sb = new StringBuilder(); 53 | int intch; 54 | boolean prevWasCR = false; 55 | synchronized (lock) { // make thread-safe (hopefully!) 56 | while ((intch = read()) != NetConstants.EOS) { 57 | if (prevWasCR && intch == LF) { 58 | return sb.substring(0, sb.length() - 1); 59 | } 60 | prevWasCR = intch == CR; 61 | sb.append((char) intch); 62 | } 63 | } 64 | final String string = sb.toString(); 65 | if (string.isEmpty()) { // immediate EOF 66 | return null; 67 | } 68 | return string; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/FTPFileEntryParserImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | import java.io.BufferedReader; 21 | import java.io.IOException; 22 | import java.util.List; 23 | 24 | /** 25 | * This abstract class implements both the older FTPFileListParser and newer FTPFileEntryParser interfaces with default functionality. All the classes in the 26 | * parser subpackage inherit from this. 27 | */ 28 | public abstract class FTPFileEntryParserImpl implements FTPFileEntryParser { 29 | 30 | /** 31 | * The constructor for a FTPFileEntryParserImpl object. 32 | */ 33 | public FTPFileEntryParserImpl() { 34 | } 35 | 36 | /** 37 | * This method is a hook for those implementors (such as VMSVersioningFTPEntryParser, and possibly others) which need to perform some action upon the 38 | * FTPFileList after it has been created from the server stream, but before any clients see the list. 39 | * 40 | * This default implementation does nothing. 41 | * 42 | * @param original Original list after it has been created from the server stream 43 | * @return {@code original} unmodified. 44 | */ 45 | @Override 46 | public List preParse(final List original) { 47 | return original; 48 | } 49 | 50 | /** 51 | * Reads the next entry using the supplied BufferedReader object up to whatever delimits one entry from the next. This default implementation simply calls 52 | * BufferedReader.readLine(). 53 | * 54 | * @param reader The BufferedReader object from which entries are to be read. 55 | * @return A string representing the next ftp entry or null if none found. 56 | * @throws IOException thrown on any IO Error reading from the reader. 57 | */ 58 | @Override 59 | public String readNextEntry(final BufferedReader reader) throws IOException { 60 | return reader.readLine(); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/parser/FTPFileEntryParserFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp.parser; 19 | 20 | import org.apache.commons.net.ftp.FTPClientConfig; 21 | import org.apache.commons.net.ftp.FTPFileEntryParser; 22 | 23 | /** 24 | * The interface describes a factory for creating FTPFileEntryParsers. 25 | * 26 | * @since 1.2 27 | */ 28 | public interface FTPFileEntryParserFactory { 29 | /** 30 | *

31 | * Implementation should be a method that extracts a key from the supplied {@link FTPClientConfig FTPClientConfig} parameter and creates an object 32 | * implementing the interface FTPFileEntryParser and uses the supplied configuration to configure it. 33 | *

34 | *

35 | * Note that this method will generally not be called in scenarios that call for autodetection of parser type but rather, for situations where the user 36 | * knows that the server uses a non-default configuration and knows what that configuration is. 37 | *

38 | * 39 | * @param config A {@link FTPClientConfig FTPClientConfig} used to configure the parser created 40 | * @return the {@link FTPFileEntryParser} so created. 41 | * @throws ParserInitializationException Thrown on any exception in instantiation 42 | * @since 1.4 43 | */ 44 | FTPFileEntryParser createFileEntryParser(FTPClientConfig config) throws ParserInitializationException; 45 | 46 | /** 47 | * Implementation should be a method that decodes the supplied key and creates an object implementing the interface FTPFileEntryParser. 48 | * 49 | * @param key A string that somehow identifies an FTPFileEntryParser to be created. 50 | * @return the FTPFileEntryParser created. 51 | * @throws ParserInitializationException Thrown on any exception in instantiation 52 | */ 53 | FTPFileEntryParser createFileEntryParser(String key) throws ParserInitializationException; 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/telnet/SuppressGAOptionHandlerTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net.telnet; 18 | 19 | import static org.junit.jupiter.api.Assertions.assertEquals; 20 | import static org.junit.jupiter.api.Assertions.assertNull; 21 | 22 | import org.junit.jupiter.api.BeforeEach; 23 | import org.junit.jupiter.api.Test; 24 | 25 | /** 26 | * JUnit test class for SuppressGAOptionHandler 27 | */ 28 | public class SuppressGAOptionHandlerTest extends AbstractTelnetOptionHandlerTest { 29 | 30 | /** 31 | * setUp for the test. 32 | */ 33 | @BeforeEach 34 | protected void setUp() { 35 | opthand1 = new SuppressGAOptionHandler(); 36 | opthand2 = new SuppressGAOptionHandler(true, true, true, true); 37 | opthand3 = new SuppressGAOptionHandler(false, false, false, false); 38 | } 39 | 40 | /** 41 | * test of server-driven subnegotiation. Checks that no subnegotiation is made. 42 | */ 43 | @Test 44 | public void testAnswerSubnegotiation() { 45 | final int[] subn = { TelnetCommand.IAC, TelnetCommand.SB, TelnetOption.SUPPRESS_GO_AHEAD, 1, TelnetCommand.IAC, TelnetCommand.SE, }; 46 | 47 | final int[] resp1 = opthand1.answerSubnegotiation(subn, subn.length); 48 | 49 | assertNull(resp1); 50 | } 51 | 52 | /** 53 | * test of the constructors. 54 | */ 55 | @Override 56 | @Test 57 | public void testConstructors() { 58 | assertEquals(TelnetOption.SUPPRESS_GO_AHEAD, opthand1.getOptionCode()); 59 | super.testConstructors(); 60 | } 61 | 62 | /** 63 | * test of client-driven subnegotiation. Checks that no subnegotiation is made. 64 | */ 65 | @Test 66 | public void testStartSubnegotiation() { 67 | 68 | final int[] resp1 = opthand1.startSubnegotiationLocal(); 69 | final int[] resp2 = opthand1.startSubnegotiationRemote(); 70 | 71 | assertNull(resp1); 72 | assertNull(resp2); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/telnet/SimpleOptionHandlerTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.apache.commons.net.telnet; 18 | 19 | import static org.junit.jupiter.api.Assertions.assertEquals; 20 | import static org.junit.jupiter.api.Assertions.assertNull; 21 | 22 | import org.junit.jupiter.api.BeforeEach; 23 | import org.junit.jupiter.api.Test; 24 | 25 | /** 26 | * JUnit test class for SimpleOptionHandler 27 | */ 28 | public class SimpleOptionHandlerTest extends AbstractTelnetOptionHandlerTest { 29 | /** 30 | * setUp for the test. 31 | */ 32 | @BeforeEach 33 | protected void setUp() { 34 | opthand1 = new SimpleOptionHandler(4); 35 | opthand2 = new SimpleOptionHandler(8, true, true, true, true); 36 | opthand3 = new SimpleOptionHandler(91, false, false, false, false); 37 | } 38 | 39 | /** 40 | * test of server-driven subnegotiation. Checks that no subnegotiation is made. 41 | */ 42 | @Test 43 | public void testAnswerSubnegotiation() { 44 | final int[] subn = { TelnetCommand.IAC, TelnetCommand.SB, 4, 1, TelnetCommand.IAC, TelnetCommand.SE, }; 45 | 46 | final int[] resp1 = opthand1.answerSubnegotiation(subn, subn.length); 47 | 48 | assertNull(resp1); 49 | } 50 | 51 | /** 52 | * test of the constructors. 53 | */ 54 | @Override 55 | @Test 56 | public void testConstructors() { 57 | assertEquals(4, opthand1.getOptionCode()); 58 | assertEquals(8, opthand2.getOptionCode()); 59 | assertEquals(91, opthand3.getOptionCode()); 60 | super.testConstructors(); 61 | } 62 | 63 | /** 64 | * test of client-driven subnegotiation. Checks that no subnegotiation is made. 65 | */ 66 | @Test 67 | public void testStartSubnegotiation() { 68 | 69 | final int[] resp1 = opthand1.startSubnegotiationLocal(); 70 | final int[] resp2 = opthand1.startSubnegotiationRemote(); 71 | 72 | assertNull(resp1); 73 | assertNull(resp2); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/examples/unix/fwhois.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.examples.unix; 19 | 20 | import java.io.IOException; 21 | import java.net.InetAddress; 22 | import java.net.UnknownHostException; 23 | 24 | import org.apache.commons.net.whois.WhoisClient; 25 | 26 | /** 27 | * This is an example of how you would implement the Linux fwhois command in Java using NetComponents. The Java version is much shorter. 28 | */ 29 | public final class fwhois { 30 | 31 | public static void main(final String[] args) { 32 | final int index; 33 | final String handle; 34 | final String host; 35 | InetAddress address = null; 36 | final WhoisClient whois; 37 | 38 | if (args.length != 1) { 39 | System.err.println("usage: fwhois handle[@]"); 40 | System.exit(1); 41 | } 42 | 43 | index = args[0].lastIndexOf('@'); 44 | 45 | whois = new WhoisClient(); 46 | // We want to timeout if a response takes longer than 60 seconds 47 | whois.setDefaultTimeout(60000); 48 | 49 | if (index == -1) { 50 | handle = args[0]; 51 | host = WhoisClient.DEFAULT_HOST; 52 | } else { 53 | handle = args[0].substring(0, index); 54 | host = args[0].substring(index + 1); 55 | } 56 | 57 | try { 58 | address = InetAddress.getByName(host); 59 | System.out.println("[" + address.getHostName() + "]"); 60 | } catch (final UnknownHostException e) { 61 | System.err.println("Error unknown host: " + e.getMessage()); 62 | System.exit(1); 63 | } 64 | 65 | try { 66 | whois.connect(address); 67 | System.out.print(whois.query(handle)); 68 | whois.disconnect(); 69 | } catch (final IOException e) { 70 | System.err.println("Error I/O exception: " + e.getMessage()); 71 | System.exit(1); 72 | } 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/util/ListenerListTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.util; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertEquals; 21 | import static org.junit.jupiter.api.Assertions.assertSame; 22 | import static org.junit.jupiter.api.Assertions.assertTrue; 23 | 24 | import java.util.EventListener; 25 | import java.util.Iterator; 26 | 27 | import org.junit.jupiter.api.Test; 28 | 29 | /** 30 | * Tests {@link ListenerList}. 31 | */ 32 | public class ListenerListTest { 33 | 34 | static class EventListenerImpl implements EventListener { 35 | // empty 36 | } 37 | 38 | @Test 39 | public void testAdd() { 40 | final EventListenerImpl eventListenerImpl = new EventListenerImpl(); 41 | final ListenerList listenerList = new ListenerList(); 42 | listenerList.addListener(eventListenerImpl); 43 | assertEquals(1, listenerList.getListenerCount()); 44 | } 45 | 46 | @Test 47 | public void testConstructor() { 48 | assertEquals(0, new ListenerList().getListenerCount()); 49 | } 50 | 51 | @Test 52 | public void testIterator() { 53 | final EventListenerImpl eventListenerImpl = new EventListenerImpl(); 54 | final ListenerList listenerList = new ListenerList(); 55 | listenerList.addListener(eventListenerImpl); 56 | final Iterator iterator = listenerList.iterator(); 57 | assertTrue(iterator.hasNext()); 58 | assertSame(eventListenerImpl, iterator.next()); 59 | } 60 | @Test 61 | public void testRemove() { 62 | final EventListenerImpl eventListenerImpl = new EventListenerImpl(); 63 | final ListenerList listenerList = new ListenerList(); 64 | listenerList.addListener(eventListenerImpl); 65 | assertEquals(1, listenerList.getListenerCount()); 66 | listenerList.removeListener(eventListenerImpl); 67 | assertEquals(0, listenerList.getListenerCount()); 68 | listenerList.iterator(); 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /.github/workflows/scorecards-analysis.yml: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache license, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # https://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the license for the specific language governing permissions and 14 | # limitations under the license. 15 | 16 | name: "Scorecards supply-chain security" 17 | 18 | on: 19 | workflow_dispatch: 20 | branch_protection_rule: 21 | push: 22 | branches: [ "master" ] 23 | paths-ignore: 24 | - '**/workflows/*.yml' 25 | - '!**/workflows/scorecards-analysis.yml' 26 | 27 | permissions: read-all 28 | 29 | jobs: 30 | 31 | analysis: 32 | 33 | name: "Scorecards analysis" 34 | runs-on: ubuntu-latest 35 | permissions: 36 | # Needed to upload the results to the code-scanning dashboard. 37 | security-events: write 38 | actions: read 39 | id-token: write # This is required for requesting the JWT 40 | contents: read # This is required for actions/checkout 41 | 42 | steps: 43 | 44 | - name: "Checkout code" 45 | uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 46 | with: 47 | persist-credentials: false 48 | 49 | - name: "Run analysis" 50 | uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # 2.4.3 51 | with: 52 | results_file: results.sarif 53 | results_format: sarif 54 | # A read-only PAT token, which is sufficient for the action to function. 55 | # The relevant discussion: https://github.com/ossf/scorecard-action/issues/188 56 | repo_token: ${{ secrets.GITHUB_TOKEN }} 57 | # Publish the results for public repositories to enable scorecard badges. 58 | # For more details: https://github.com/ossf/scorecard-action#publishing-results 59 | publish_results: true 60 | 61 | - name: "Upload artifact" 62 | uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 63 | with: 64 | name: SARIF file 65 | path: results.sarif 66 | retention-days: 5 67 | 68 | - name: "Upload to code-scanning" 69 | uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9 70 | with: 71 | sarif_file: results.sarif 72 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/examples/mail/IMAPMail.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.examples.mail; 19 | 20 | import java.io.IOException; 21 | import java.net.URI; 22 | 23 | import org.apache.commons.net.PrintCommandListener; 24 | import org.apache.commons.net.imap.IMAPClient; 25 | 26 | /** 27 | * This is an example program demonstrating how to use the IMAP[S]Client class. This program connects to a IMAP[S] server, lists its capabilities and shows the 28 | * status of the Inbox. 29 | *

30 | * Usage: IMAPMail imap[s]://user:password@server/ 31 | *

32 | * For example
33 | * IMAPMail imaps://user:password@imap.mail.yahoo.com/
34 | * or
35 | * IMAPMail imaps://user:password@imap.googlemail.com/ 36 | */ 37 | public final class IMAPMail { 38 | 39 | public static void main(final String[] args) throws IOException { 40 | if (args.length != 1) { 41 | System.err.println("Usage: IMAPMail imap[s]://user:password@server/"); 42 | System.err.println("Connects to server; lists capabilities and shows Inbox status"); 43 | System.exit(1); 44 | } 45 | 46 | final URI uri = URI.create(args[0]); 47 | 48 | // Connect and login 49 | final IMAPClient imap = IMAPUtils.imapLogin(uri, 10000, null); 50 | 51 | // suppress login details 52 | imap.addProtocolCommandListener(new PrintCommandListener(System.out, true)); 53 | 54 | try { 55 | imap.setSoTimeout(6000); 56 | 57 | imap.capability(); 58 | 59 | imap.select("inbox"); 60 | 61 | imap.examine("inbox"); 62 | 63 | imap.status("inbox", new String[] { "MESSAGES" }); 64 | 65 | imap.list("", "*"); // Show the folders 66 | 67 | } catch (final IOException e) { 68 | System.out.println(imap.getReplyString()); 69 | e.printStackTrace(); 70 | System.exit(10); 71 | } finally { 72 | imap.logout(); 73 | imap.disconnect(); 74 | } 75 | } 76 | } 77 | 78 | -------------------------------------------------------------------------------- /src/main/java/org/apache/commons/net/ftp/FTPSCommand.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.ftp; 19 | 20 | /** 21 | * FTPS-specific commands. 22 | * 23 | * @since 2.0 24 | * @deprecated 3.0 DO NOT USE 25 | */ 26 | @Deprecated 27 | public final class FTPSCommand { 28 | 29 | /** 30 | * {@value} 31 | */ 32 | public static final int AUTH = 0; 33 | 34 | /** 35 | * {@value} 36 | */ 37 | public static final int ADAT = 1; 38 | 39 | /** 40 | * {@value} 41 | */ 42 | public static final int PBSZ = 2; 43 | 44 | /** 45 | * {@value} 46 | */ 47 | public static final int PROT = 3; 48 | 49 | /** 50 | * {@value} 51 | */ 52 | public static final int CCC = 4; 53 | 54 | /** 55 | * {@value} 56 | */ 57 | public static final int AUTHENTICATION_SECURITY_MECHANISM = AUTH; 58 | 59 | /** 60 | * {@value} 61 | */ 62 | public static final int AUTHENTICATION_SECURITY_DATA = ADAT; 63 | 64 | /** 65 | * {@value} 66 | */ 67 | public static final int PROTECTION_BUFFER_SIZE = PBSZ; 68 | 69 | /** 70 | * {@value} 71 | */ 72 | public static final int DATA_CHANNEL_PROTECTION_LEVEL = PROT; 73 | 74 | /** 75 | * {@value} 76 | */ 77 | public static final int CLEAR_COMMAND_CHANNEL = CCC; 78 | 79 | /** 80 | * {@value} 81 | */ 82 | private static final String[] commands = { "AUTH", "ADAT", "PBSZ", "PROT", "CCC" }; 83 | 84 | /** 85 | * Gets the FTPS command string corresponding to a specified command code. 86 | * 87 | * @param command The command code. 88 | * @return The FTPS command string corresponding to a specified command code. 89 | */ 90 | public static String getCommand(final int command) { 91 | return commands[command]; 92 | } 93 | 94 | /** 95 | * Constructs a new instance. 96 | */ 97 | public FTPSCommand() { 98 | // empty 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/test/java/org/apache/commons/net/nntp/TestThreader.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * https://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.commons.net.nntp; 19 | 20 | import static org.junit.jupiter.api.Assertions.assertNull; 21 | 22 | import java.util.Arrays; 23 | import java.util.List; 24 | 25 | import org.junit.jupiter.api.Test; 26 | 27 | /** 28 | * Test the Threader 29 | */ 30 | public class TestThreader { 31 | 32 | private static final Threadable[] EMPTY_THREADABLE_ARRAY = {}; 33 | 34 | @SuppressWarnings("deprecation") // test of deprecated method 35 | @Test 36 | public void testEmptyArray() { // NET-539 37 | final Threader t = new Threader(); 38 | final Threadable[] messages = EMPTY_THREADABLE_ARRAY; 39 | assertNull(t.thread(messages)); 40 | } 41 | 42 | @Test 43 | public void testEmptyIterable() { // NET-539 44 | final Threader t = new Threader(); 45 | final Threadable[] messages = EMPTY_THREADABLE_ARRAY; 46 | final Iterable asList = Arrays.asList(messages); 47 | assertNull(t.thread(asList)); 48 | } 49 | 50 | @Test 51 | public void testEmptyList() { // NET-539 52 | final Threader t = new Threader(); 53 | final Threadable[] messages = EMPTY_THREADABLE_ARRAY; 54 | final List asList = Arrays.asList(messages); 55 | assertNull(t.thread(asList)); 56 | } 57 | 58 | @Test 59 | @SuppressWarnings("deprecation") // test of deprecated method 60 | public void testNullArray() { // NET-539 61 | final Threader t = new Threader(); 62 | final Threadable[] messages = null; 63 | assertNull(t.thread(messages)); 64 | } 65 | 66 | @Test 67 | public void testNullIterable() { 68 | final Threader t = new Threader(); 69 | final Iterable messages = null; 70 | assertNull(t.thread(messages)); 71 | } 72 | 73 | @Test 74 | public void testNullList() { 75 | final Threader t = new Threader(); 76 | final List messages = null; 77 | assertNull(t.thread(messages)); 78 | } 79 | 80 | } 81 | --------------------------------------------------------------------------------